首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

函数模板编译有关问题,

2012-10-21 
函数模板编译问题,求助!C/C++ code#include iostreamusing namespace stdtemplate typename Tstruct

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

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);} 

热点排行