以下模板特化代码:
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>()
{
}
产生以下编译错误:
error C2768: 'spec1' : illegal use of explicit template arguments
有人知道为什么吗?
最佳答案
函数模板不能部分特化,只能完全特化,即:
template<>
void spec1<char, int>()
{
}
为什么函数模板不能部分特化,你可能想read this .
当您部分特化(仅可能用于类(class))时,您必须这样做:
template <typename T1>
class class1<T1, int>
{
};
所以你必须列出 T1
再次。
你的特化的写法,对于 spec1<int, int>
来说是模棱两可的。 .
关于函数: "illegal use of explicit template arguments"的C++模板特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1416345/