Подскажите, можно ли реализовать следующую вещь:
Есть класс CFraction с конструктором CFraction(int, int), что даёт возможность делать такую инициализацию:
const CFraction value = {1, 3};
Можно ли у класса CFraction переопределить оператор + так, чтобы можно было писать вот такой код:
const CFraction value2 = value + {2, 5};
?
Т.е. без каких либо явных преобразований типов
Нет, без явной типизации такая перегрузка невозможна.
Единственно, что можно сделать:
CFraction operator+=(initializer_list<int> values) const
{
...
}
И вы можете получить желаемый результат в 2 шага:
value += {2, 5}value2 = valueПерегрузка + возможна, но так, как выше описал Harry:
CFraction operator+ (initializer_list<int> values) {
...
}
, но придется обращаться одним из двух методов:
value2 = value.operator + ({1,2});value2 = value + initializer_list<int>{1,2};Это обуславливается стандартом C++14 (параграфы 5.17 и 8.5.4 ), где пишется, что initializer_list в правой части выражения может применяться только к операторам assignment-operator: = *= /= %= += -= >>= <<= &= ˆ= |=
Продвижение своими сайтами как стратегия роста и независимости