C ++模板功能专用:“非法使用显式模板参数”

时间:2009-09-12 22:44:02

标签: c++ templates template-specialization typename

以下模板专业化代码:

template<typename T1, typename T2>
void spec1()
{

}

测试案例1:

template< typename T1> //compile error
void spec1<int>()
{

}

测试案例2:

template< typename T2> //compile error
void spec1<int>()
{

}

生成以下编译错误:

  

错误C2768:'spec1':非法使用显式模板参数

有谁知道为什么?

1 个答案:

答案 0 :(得分:52)

功能模板不能完全专门化,只能完全,即:

template<>
void spec1<char, int>()
{

}

为什么功能模板不能部分专业化,您可能需要read this

当你专门部署(只适用于课程)时,你必须这样做:

template <typename T1>
class class1<T1, int>
{

};

所以你必须再次列出T1

您的专业化写作方式对于spec1<int, int>来说是不明确的。