条款46:需要类型转换时请为模板定义非成员函数
template<typename T>
class Rational {
public:
Rational(const T& numerator = 0, const T& denominator = 1);
...
};
template<typename T>
const Rational<T> operator*(const Rational<T>& lhs, const Rational<T>& rhs) {
...
}
Rational<int> oneHalf(1, 2);
Rational<int> result = oneHalf * 2; // 无法通过编译template<typename T>
class Rational {
public:
...
friend const Rational operator*(const Rational& lhs, const Rational& rhs);
};
template<typename T>
const Rational<T> operator*(const Rational<T>& lhs, const Rational& rhs) { ... }Last updated