【发布时间】:2012-01-23 20:49:42
【问题描述】:
我的 C++ 程序中有一个数据结构,它有一些“向量”类型的属性(由我定义)和一些“双精度”类型的属性。在我的代码的另一个地方,我非常希望能够遍历这个数据结构,并对每个值执行相同的算术运算。我需要的运算符是为 Vector 定义的,因此对于 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 的一些值可能是向量,而一些可能是双精度值,理想情况下,这段代码将处理这种类型的不同对象,这些对象可能具有不同的数字或各种价值观。我想要的样子:
for (int j = 0; j < e.values.size(); j ++)
{
e.values[j] = k0[i].values[j] + k1[i].values[j]
}
理想情况下,我应该让 e 是可迭代的,或者提供某种 next 函数,但要做到这一点,要么:它必须将它的变量存储在一个只能包含一种已知类型的数组中,或者它会提供next 只能返回一种已知类型的函数。
我试图找到一种方法来抽象这个概念,这样我就可以在不知道每个值的类型的情况下迭代 e 类型的东西。
【问题讨论】:
-
这有点含糊。给我们一些更具体的东西。我们有一个内置的编译时语言,所以它可能取决于你想要做什么。
-
您将如何“遍历
double值”?它们是否存储在某种数据结构中?确实,请更具体一些,或许可以提供类定义的相关部分。
标签: c++ types operators abstraction