C++ ||c+中的运算符+;关于向量范数
我正试图为向量编写一个自己的“库”,在这里我可以定义操作符,例如“*”用于标量乘法和“+”用于向量加法等。我想我大部分都是对的,但现在我正试图使用“| |”为向量的l2范数定义一个操作符,这意味着:C++ ||c+中的运算符+;关于向量范数,c++,vector,operator-keyword,norm,C++,Vector,Operator Keyword,Norm,我正试图为向量编写一个自己的“库”,在这里我可以定义操作符,例如“*”用于标量乘法和“+”用于向量加法等。我想我大部分都是对的,但现在我正试图使用“| |”为向量的l2范数定义一个操作符,这意味着: 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|' (operan
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);
}
或者我尝试将其定义为具有两个参数的友元函数。我认为主要的问题是我必须给操作符什么参数,因为它总是需要两个(如果它是成员函数,则需要一个)。我只是想不出一个办法
你们有没有人知道如何解决这个问题,或者没有解决这个问题的方法,我必须使用一个普通函数
> p>你不能这样做,因为C++不支持这样的语法。您所能做的最好的事情就是创建一个名为
magnity
的函数,并在其中进行计算。像这样:
template <typename T>
T magnitude(std::vector<T> const& vec) { ... }
double a = magnitude(v);
模板
T震级(std::vector const&vec){…}
双a=幅值(v);
不管你如何滥用C++的语法,恐怕都没有办法把翻成a=|v |代码>为有效代码,因为<代码> > >只能是二进制缀算符。C++中的运算符< /P>有必需的语法。您不能创建自己的运算符。您不能创建自己的运算符或更改现有运算符的语法。谢谢您的快速回答!这两个运算符|
和|
都是二进制的-它们分别用于具有两个参数(不多也不少)的表达式中,例如a | b
或a | b
。不可能实现与语言已经支持的任何其他操作符的不同形式,因为这是C++标准特别禁止的。换句话说,您无法为|
或|
(或任何其他运算符)添加新的含义,以允许|a |
甚至有效。无法抗拒诱惑。。。我对此感到抱歉abuse@Ayxan那太可怕了:p