C++的函数模板是不是不能部分具体化?
在C++primer plus的14章里讲到类模板可以部分具体化,如:template<class T1, class T2>class Pair(T1, T2);
template<class T1>class Pair<int>(T1, int);
我有个小问题就是函数模板能否部分具体化:
template<class T1, class T2>void demo(T1 t1, T2 t2){cout<<"usual function template"<<endl;}
template<class T1>void demo<int> demo(T1 t1, int t2){cout<<"partial specialization template"<<endl;}
我在VS2010 里运行出现错误:
error C2768: “demo”: 非法使用显式模板参数
我想问问是我函数写错还是模板函数本身就无法部分具体化?
程序代码:
#include<iostream> using std::cout; using std::endl; template <class T1, class T2, class T3> void demo(T1 t1,T2 t2, T3 t3){ cout<<"usual template "endl; } template<class T1, class T2>void demo<T1,T2,int>( T1 t2, T2 t3,int i){ cout<<"partial specialization template "<<endl; } template <> void demo<int,int,int>(int t1,int t2, int t3){ cout<<" specialization template: "<<t1<<": "<<t2<<": "<<t3<<endl; } int main(){ demo(1.1,2.2,3.3); demo(1.1,2.1,3); demo(1,2,3); getchar(); return 0; }