我正在尝试重载除法运算符,以便能够使用以下符号将std :: vector除以双标量:
template <typename T>
std::vector<T> operator/(const double& a, const std::vector<T>& b) {
std::vector<T> c(b.size());
for(int i=0;i<b.size();++i)
c[i] = b[i] / a;
return c;
}
如果我然后尝试计算:
std::vector<double> M(Z.size());
M = Z / a;
其中Z是有效的std :: vector。
编译器(Xcode)阻止我说“无效表达式的操作数无效('std :: vector'和'double')。任何人都可以告诉我为什么我的模板不起作用并推荐给我一个合适的替代品吗?< / p>
非常感谢!
答案 0 :(得分:1)
C ++中的运算符重载声明对参数顺序很敏感。将向量放在参数列表中的第一个将是更传统的。
尝试
std::vector<T> operator/(const std::vector<T>& b, const double& a)
或
M = a / Z;
话虽如此,我同意@krzaq的评论,你可能会因为std::valarray
而不是重新发明轮子而受益。如果您的目标是尝试了解有关模板和操作员重载的更多信息,或者如果您有其他目标,那么请自行解决。