Почему бы просто не определить функцию внутри класса?Таким образом, вы можете просто использовать
MyClass<T>& operator +=(const T& rhs)
{
val += rhs;
return *this;
}
Обратите внимание на использование +=
внутри реализации operator+=
.Это работает, потому что +=
уже реализован, потому что это +=
для встроенных типов.Обычно вы должны использовать val = val + rhs
, потому что вы реализуете +=
, поэтому нет смысла использовать его внутри реализации.
Если вы хотите определить его вне класса, он собираетсябыть немного более хлопотным.
В вашем классе вам нужно объявить
template<typename U>
friend MyClass<U>& operator +=(MyClass<U>& lhs, const U& rhs);
Тогда для определения функции вне класса
template<typename U>
MyClass<U>& operator +=(MyClass<U>& lhs, const U& rhs)
{
lhs.val += rhs;
return lhs;
}