C ++ перегруженный оператор с обратным порядком ассоциативности

Было очень сложно придумать название … (я не являюсь носителем английского языка.)

struct A
{
int value;
A operator+(int i) const
{
A a;
a.value=value+i;
return a;
};
};
int main(){
A a;
a.value=2;
a=a+2;
return 0;
}

Этот код компилируется / работает как положено, но когда я изменяю a = a + 2 на a = 2 + a, он больше не будет компилироваться.
GCC дает мне эту ошибку:

no match for ”operator+” in ”2 + a”

Есть ли способ как-то заставить 2 + работать так же, как + 2?

4

Решение

Вам нужна бесплатная функция, определенная после класс

struct A
{
// ...
};

A operator+(int i, const A& a)
{
return a+i; // assuming commutativity
};

Кроме того, вы могли бы рассмотреть возможность определения A& operator+=(int i); в A реализовать обе версии operator+ как свободные функции. Вы также можете быть заинтересованы в Boost.Operators или других помощников для упрощения Aсм. мой профиль для двух вариантов.

5

Другие решения

Конечно, определите обратный оператор вне класса:

struct A
{
int value;
A operator+(int i) const
{
A a;
a.value=value+i;
return a;
};
};
//marked inline to prevent a multiple definition
inline A operator+(int i, const A& a)
{
return a + i;
}
3

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector