24

以下模板特化代码:

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”:非法使用显式模板参数

有谁知道为什么?

4

1 回答 1

59

函数模板不能部分特化,只能完全特化,即:

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

}

关于为什么函数模板不能部分特化的原因,您可能需要阅读这篇文章

当您部分专业化(仅适用于课程)时,您必须这样做:

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

};

所以你必须T1再次列出。

您的专业化的编写方式,对于spec1<int, int>.

于 2009-09-12T22:59:52.283 回答