Item 46:需要类型转换时,应当在类模板中定义非成员函数
Posted harttle
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Item 46:需要类型转换时,应当在类模板中定义非成员函数相关的知识,希望对你有一定的参考价值。
模板化的Rational
template<typename T>
class Rational
public:
Rational(const T& numerator = 0, const T& denominator = 1);
const T numerator() const;
const T denominator() const;
;
template<typename T>
const Rational<T> operator*(const Rational<T>& lhs, const Rational<T>& rhs)
模板参数推导出错
Rational<int> oneHalf(1, 2); // OK
Rational<int> result = oneHalf * 2; // Error!
声明为友元函数
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<T>& rhs)
在类中给出定义
template<typename T>
class Rational
public:
friend const Rational operator*(const Rational& lhs, const Rational& rhs)
return Rational(lhs.numerator() * rhs.numerator(), lhs.denominator() * rhs.denominator());
;
调用辅助函数
template<typename T> class Rational;
template<typename T>
const Rational<T> doMultiply(const Rational<T>& lhs, const Rational<T>& rhs);
template<typename T>
class Rational
public:
friend Rational<T> operator*(const Rational<T>& lhs, const Rational<T>& rhs)
return doMultiply(lhs, rhs);
;
本文地址:http://harttle.com/2015/09/14/effective-cpp-46.html
以上是关于Item 46:需要类型转换时,应当在类模板中定义非成员函数的主要内容,如果未能解决你的问题,请参考以下文章