c++ переопределение оператора + с использованием конструкции {x, y}

Подскажите, можно ли реализовать следующую вещь:

Есть класс CFraction с конструктором CFraction(int, int), что даёт возможность делать такую инициализацию:

const CFraction value = {1, 3};

Можно ли у класса CFraction переопределить оператор + так, чтобы можно было писать вот такой код:

const CFraction value2 = value + {2, 5};

?

Т.е. без каких либо явных преобразований типов


Ответы (1 шт):

Автор решения: Vladimir Afanasyev

Нет, без явной типизации такая перегрузка невозможна.

Единственно, что можно сделать:

CFraction operator+=(initializer_list<int> values) const
    {
        ...
    }

И вы можете получить желаемый результат в 2 шага:

  1. value += {2, 5}
  2. value2 = value

Перегрузка + возможна, но так, как выше описал Harry:

CFraction operator+ (initializer_list<int> values) {
        ...
    }

, но придется обращаться одним из двух методов:

  1. value2 = value.operator + ({1,2});
  2. value2 = value + initializer_list<int>{1,2};

Это обуславливается стандартом C++14 (параграфы 5.17 и 8.5.4 ), где пишется, что initializer_list в правой части выражения может применяться только к операторам assignment-operator: = *= /= %= += -= >>= <<= &= ˆ= |=

→ Ссылка