【发布时间】:2013-08-08 07:16:19
【问题描述】:
出于教育目的,我正在编写自己的 C++ 数值向量模板类。我希望能够为两个向量的点积编写 (v, w) 并因此重载operator,(),如下所示:
template<class T>
const T Vector<T>::operator,(const Vector<T>& v) const
{
assertEqualSize(v);
T t;
for(size_t i=0; i<numElements; i++) {
t += elements[i] * v[i];
}
return t;
}
我现在的问题是:如何使用合理的值正确初始化 t(例如 0.0 用于 Vector<double>)?我尝试了T t();,但随后 g++ 告诉我,例如,“double(*)()”不能在 return 语句中转换为“const double”,并且operator+=() 不会为“(double(),双)”。
非常感谢!
【问题讨论】:
-
对点积使用
(v,w)相当奇怪。为什么不简单地重载*,即点积的v*w? (这就是我使用的)。在 3D 中,可以使用^实现矢量积。当然,标量或矩阵的乘法也可以使用*(的另一个重载)来实现。 -
我同意重复使用逗号运算符 si 不是一个好主意。会导致代码混乱。不幸的是,重新使用
*也不是一个好主意,因为它不是明确的,交叉产品是一个明显的候选者。我通常为涉及向量的二元运算提供函数。