|| оператор в с ++ для векторной нормы - PullRequest
0 голосов
/ 19 февраля 2020

Я пытаюсь написать собственную «библиотеку» для векторов, где я могу определить операторов , таких как "*" для скалярного умножения и "+" для сложения векторов и т. д. c. Я думаю, что я понял большую часть этого правильно, но теперь я пытаюсь определить оператор для 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);
}

или я попытался определить его как функцию друга с двумя параметрами. Я думаю, что основная проблема заключается в том, какие параметры я должен дать оператору, потому что он всегда требует два (или один, если это функция-член). Я просто не могу придумать, как это сделать ...

Кто-нибудь из вас знает, как решить эту проблему, или нет решения для этого, и я должен использовать обычную функцию?

Заранее спасибо:)

Ответы [ 2 ]

3 голосов
/ 19 февраля 2020

Независимо от того, насколько сильно вы злоупотребляете синтаксисом C ++, я боюсь, что нет способа превратить double a = |v|; в действительный код, потому что | может быть только двоичным инфиксным оператором.

3 голосов
/ 19 февраля 2020

Вы не можете сделать это, потому что C ++ не поддерживает такой синтаксис. Лучшее, что вы можете сделать, - это создать функцию с именем что-то вроде magnitude и выполнить в ней свои вычисления. Как это:

template <typename T>
T magnitude(std::vector<T> const& vec) { ... }

double a = magnitude(v);
...