需要类型转换时,请为模板定义class 内部的friend函数
还是以一个例子作为开头:
template <class T>
class Rational
{
public:
Rational(const T& numerator=0,const T&numerator=1 );
}
template<T>
const Rational<T> operator*(const Rational<T> &lhs,const Rational<T>&rhs);
{
...
}
Rational<int> onehalf(1,2);
Ratinal<int> res=onehalf*2;
这个函数低啊用Rational<int> res=onehalf*2是无法通过编译,模板函数要进行参数推导,那么他在推导2的时候遇到了障碍.要让这个函数通过编译,我们可以利用类不用进行函数推导的性质声明并定义个friend内部函数。
template <class T>
class Rational
{
public:
Rational(const T& numerator=0,const T&numerator=1 );
friend const Rational operator*(const Rational &lhs,const Rational&rhs);
{
...
}
}
Rational<int> onehalf(1,2);
Ratinal<int> res=onehalf*2;
这样类在定义的时候就声明出了operator*(const Rational &lhs,const Rational&rhs);解可以将2隐式转换。