###以下のように一部パラメータだけ明示するのは、部分特殊化の範疇らしい。
template<int N,class T>
void func1();
template<class T>
void func1<0,T>();
// 以下のように、完全な明示特殊化は可能
//template<>
//void func1<0,int>();
関数テンプレートでは部分特殊化ができないため、以下のようなエラーメッセージが出る。
error: non-type partial specialization ‘func1<0, T>’ is not allowed
void func1<0,T>();
構造体では、部分特殊化が可能なため、以下のように書ける。
template<int N,class T>
struct struct1{
static const int value = 1;
};
template<class T>
struct struct1<2,T>{
static const int value = 2;
};
int main()
{
std::cout<<struct1<1,int>::value<<std::endl;
std::cout<<struct1<2,int>::value<<std::endl;
}
###関数テンプレートの型推定は、一部パラメータだけに作用させることが可能
template<int N,class T>
void func1(T val){
std::cout<<N<<" "<<val<<std::endl;
};
int main()
{
int val = 10;
func1<5>(val);
}