函数模板编译问题,求助!
- C/C++ code
#include <iostream>using namespace std;template <typename T>struct param_type{ typedef T type; //typedef typename _if_<typename is_scalar<T>::type, T, T const &>::type type;};template <typename T>typename param_type<T>::type bigger(typename param_type<T>::type a, typename param_type<T>::type b){ return(a > b ? a : b);}/* okparam_type<char>::type bigger(param_type<char>::type a, param_type<char>::type b){ return(a > b ? a : b);}*/int main(int argc, char * argv[]){ char a = 'a'; char b = 'b'; char c = bigger(a, b); return(0);}
编译时说,找不到匹配的bigger(); 自己分析应该是可以找到的,去掉重载的注释是可以的,求助!
[解决办法]
==>
char c = bigger<char>(a, b);
[解决办法]
模板实例化是 bigger<char>
[解决办法]
既然已经用了template <typename T>,直接用的时候char c = bigger<char>(a, b);就可以了吧,似乎没必要再声明param_type<char>::type bigger()
[解决办法]
[解决办法]
满足一定条件才能隐式推导出类型
- C/C++ code
template <typename T>struct traits{ typedef T type;};template <typename T>typename traits<T>::type _bigger(typename traits<T>::type a, typename traits<T>::type b){ return a > b ? a : b;}template <typename T>typename traits<T>::type bigger(T const& a, T const& b){ return _bigger<T>(a,b);}int main(int argc, char * argv[]){ char a = 'a'; char b = 'b'; char c = bigger(a, b); return(0);}