读书人

函数模板编译有关问题

发布时间: 2012-10-21 09:00:07 作者: rapoo

函数模板编译问题,求助!

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()
[解决办法]
探讨
编译时说,找不到匹配的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);} 

读书人网 >C++

热点推荐