是否有办法欺骗编译器允许头文件中的模板特化?
Is there any way to trick the compiler into allowing template specializations in the header file?
通常,当您编写模板类并在该类中具有函数的专门化时,您需要将专门化放在.cpp文件中,因为它是一个具体的定义(而不是模板定义)。如果你只有一个很小的函数要专门化,虽然这有点烦人,但有时你可能会忘记在.cpp文件中查找最后一个定义,这可能会导致混乱。
在这种情况下,最好在头文件中包含一个专门化和模板定义的其余部分。有什么技巧可以让你做到这一点吗?使用inline
关键词:
template <unsigned N>
unsigned get_const()
{
return N;
}
template <>
inline unsigned get_const<42>()
{
throw "meaning of life";
}
关键字表明多个定义应该被假定为相同的,因此不存在错误。(这与static
是正交的,后者在自己的翻译单元中保留重复的定义。)
注意,这适用于所有函数,而不仅仅是模板或特殊化。
您可以将专门化包围到空的namespace
中,但这可能导致它们在不同的名称空间中定义。然后,您可以在空名称空间中创建别名,这些别名是这些专门化的typedef
。
相关文章:
- 在C++中使用没有合作伙伴Class/Cpp文件的头文件是否实用
- 创建单独的实现文件和头文件
- 如何在不包含完整的文件系统头的情况下使用文件系统的类路径C++17?
- 将 std::文件系统头文件添加到我的程序时出现编译错误
- 如何添加相对于当前文件的头文件路径
- 如果我只有.o文件,则可以反映可执行文件中标头文件中的更改
- 从 cpp 文件创建头文件 .h
- C++:通过简单的添加示例了解头文件和头保护
- 没有这样的文件(标头文件)错误
- 在其他头文件的头文件中包括类
- 如何处理 CPP 文件和头文件
- 在静态库中硬编码的代码文件和头路径
- 防止包括从hxx(模板定义)文件结束头
- c++头文件-实现-头文件-实现依赖链
- 重载运算符时,如何从实现文件访问头文件中<<数组?
- 哪个是最佳实践?在c++文件或头文件中定义字符串
- 第一个c++文件和头LNK2019错误
- 使用更多c++文件在头文件中声明的全局变量
- 将这个实例变量添加到C++11文件的头中会使编译器陷入困境.为什么?
- 使用clang在源-源转换中添加文件作为头文件