C++ ||c+中的运算符+;关于向量范数

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

我正试图为向量编写一个自己的“库”,在这里我可以定义操作符,例如“*”用于标量乘法和“+”用于向量加法等。我想我大部分都是对的,但现在我正试图使用“| |”为向量的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|' (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