c++ - 在 C++ 中使用最小类型歧义

标签 c++ types operators abstraction

我的 C++ 程序中有一个数据结构,它具有一些类型为“Vector”(由我定义)的属性和一些类型为“double”的属性。在我代码的另一个地方,我非常希望能够遍历这个数据结构,并对每个值执行相同的算术运算。我需要的运算符是为 Vector 定义的,因此代码看起来与我需要为 Vector 类型和 double 类型执行的操作完全相同。

如果可能的话,我想避免迭代“vector 值”然后单独迭代“ double 值”。

我意识到这对 C++ 的严格类型造成了压力,但有什么好的方法可以做到这一点吗?

编辑:

现在,我正在做一些像这样的例行操作:

e.values.vel = k0[i].vel + k1[i].vel * c_1;
e.values.acc = k0[i].acc + k1[i].acc * c_1;
....

(e和k0[i]是同一个类类型)

现在,唯一阻止我概括 e 的类型的事实是 e 的一些值可能是 vector ,有些可能是 double 值,理想情况下,这段代码将处理这种类型的不同对象,这些对象可能具有不同的数字或各种值(value)观。我想要的是这样的:

for (int j = 0; j < e.values.size(); j ++)
{
    e.values[j] = k0[i].values[j] + k1[i].values[j]
}

理想情况下,我会让 e 是可迭代的,或者提供某种 next 函数,但要做到这一点,要么:它必须将它的变量存储在一个只能包含一种已知类型的数组中,要么它会提供下一个函数,它只能返回一个已知类型。

我正在尝试找到一种方法来抽象这个概念,这样我就可以在不知道每个值的类型的情况下迭代 e 的类型。

最佳答案

您可能需要考虑 Boost.Fusion .它允许您将您的类型转换为编译时序列,然后您可以在其中使用编译时扩展 foreach 为每个元素调用适当的仿函数。

关于c++ - 在 C++ 中使用最小类型歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8978347/

相关文章:

C 中的复合赋值运算符

c++ - QImage 使用 OpenCV 损坏

c++ - Apple Mach-O 链接器错误,由于文件扩展名

c++ - 如何要求显式强制转换

c++ - 试图理解 C++ 列表

swift - 如何在 Swift 中从 Mirror 对象的子对象创建类的实例

haskell - 声明 Eq (Tree a) 的实例,其中如果两棵树具有相同的元素,则它们相等

types - 没有类型规范的函数的警告?

c - 使用 "array name"和 "address-of array name"打印数组的地址

PHP 速记加法运算符 - undefined offset