标签:style blog http color cti io
本文为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; //errortemplate<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){
...
}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 需要类型转换时请为模板定义非成员函数,布布扣,bubuko.com
Effective C++ Item 46 需要类型转换时请为模板定义非成员函数
标签:style blog http color cti io
原文地址:http://blog.csdn.net/zhengsenlie/article/details/37754707