函数: "illegal use of explicit template arguments"的C++模板特化

标签 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>()
{

}

产生以下编译错误:

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/

相关文章:

c++ - 使用 physfs 从 zip 内部使用 Lua "require"

c++ - 调试-进入操作系统功能?

c++ - 抽象类是否有 VTABLE?

c++ - 如何防止 C++ 模板的特化?

css - 如何从 Blogger 购物模板中删除页脚文本

c++ - 避免无休止的虚拟查找

C++17 根据文件路径自动创建目录

c++ - 我应该声明我的函数模板特化还是定义它们就足够了?

c++ - 类模板状态数据成员,而不是可以显式特化的实体

c++ - 只有一个模板特化有用吗?