У меня есть шаблон с шаблоном typename T
. Он содержит функцию,
template <typename T, size_t a>
myClass<T,a> operator+(myClass<T,a> lhs, const T& rhs) {
return lhs += rhs;
}
myClass<T,a> myClass<T,a>::operator+=(const T& rhs) {
// Do addition, depends on 'a'.
return *this;
}
Когда я вызываю это, например
myClass<double, 2> myObj_double_2(constructor args);
myObj_double_2 = myObj_double_2 + 5.2;
У меня нет проблем.
Если я однако звоню
myObj_double_2 = myObj_double_2 + 5;
Затем компилятор дает мне сообщение типа - No match for 'operator+' (operand types are 'myClass<double, 2ul>' and 'int'). Candidates are ... note: deduced conflicting types for parameter 'const T' ('double' and 'int')
.
Можно ли каким-либо образом написать код, чтобы разрешить передачу дополнительных типов, которые имеют преобразование в T
(поскольку, например, double (5) является допустимым вызовом конструктора)?