标签:
本文senlie原版的,转载请保留此地址:http://blog.csdn.net/zhengsenlie
经验:当我们编写一个 class template, 而它所提供之"与此 template 相关的"函数支持"全部參数之隐式类型转换"时。请将那些函数定义为 "class template内部的 friend 函数"。
演示样例:template<typename T> class Rational{ public: Rational(const T &numerator = 0, const T &denominator = 1) // Item 20 对于自己定义类型以passed by reference方式传递參数。这里T有可能是内置类型或自己定义类型。 const T numerator() const; //Item 28 避免返回 handles 指向对象内部成分。 const denominator() const; }; 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; //error
template<typename> 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<T> &rhs){ ... }
纠正2:把 operator* 函数本体合并至声明式内
template<typename> class Rational{ public: friend const Rational operator*(const Rational &lhs, const Rational &rhs){ return Rational(lhs.numerator() * rhs.numerator(), lhs.denominator() * rhs.denominator) } };
Effective C++ Item 46 当需要投你非成员函数定义模板
标签:
原文地址:http://www.cnblogs.com/mengfanrong/p/4605958.html