我正试图为向量编写一个自己的"库",在那里我可以定义运算符,例如"*">用于标量乘法,"+">用作向量加法等
Vector v;
// let v be (3, 4)
double a = |v|;
// then a should be 5 (sqrt(16 + 9))
但后来我得到了这个错误:
main.cpp:11:17: error: no match for 'operator|' (operand types are 'Vector' and 'int')
double a = v|2|;
~^~
main.cpp:11:20: error: expected primary-expression before ';' token
double a = v|2|;
现在我正在努力定义运算符||。。。
我试着做这样的事情:
double Vector::operator||(int){
// here I used the scalar product to calculate the norm
double d = (*this) * (*this);
return sqrt(d);
}
或者我尝试将其定义为具有两个参数的朋友函数。我认为主要的问题是我必须给运算符什么参数,因为它总是需要两个(如果是成员函数,则需要一个(。我就是想不出办法…
你们中有人知道如何解决这个问题吗?或者没有解决方案,我必须使用一个正常函数?
提前感谢:(
您不能这样做,因为C++不支持这样的语法。你能做的最好的事情就是创建一个类似magnitude
的函数,并在其中进行计算
template <typename T>
T magnitude(std::vector<T> const& vec) { ... }
double a = magnitude(v);
不管你怎么滥用C++的语法,恐怕都无法将double a = |v|;
转化为有效的代码,因为|
只能是一个二进制中缀运算符。