模板函数的隐式(implicit)范例转换, 涉及到模板参数(typename)简直定问题.
从int或double范例, 无法隐式转换为模板类(template class)的范例, 因为无法确定模板参数范例(typename), 就无法确定结构函数的参数.
所以需要使模板函数, 与模板类拥有沟通的参数范例(typename), 则需要成为模板类的友元(friend).
模板类的友元, 会跟着类的参数实例化, 而实例化参数范例, 从一个函数模板, 生成定制的函数, 即可以通过隐式范例转换.
因为生成了定制的函数, 所以无法找到外部的模板类界说, 可以通过:
1. 直接在友元函数内部, 实现代码(inline);
2. 在友元函数内部, 实现一个模板函数, 在把模板函数在外部实现.
代码如下:
/* * test.cpp * * Created on: 2014.04.22 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <iostream> template<typename T> class Rational; template<typename T> const Rational<T> doMultiply (const Rational<T>& lhs, const Rational<T>& rhs); //有理数 //result = 0.875作者:csdn博客 Spike_King