c++ - 有什么方法可以诱使编译器允许头文件中的模板特化吗?

标签 c++ templates

通常,当您编写模板类并对该类中的函数进行特化时,您需要将特化放在 .cpp 文件中,因为它是具体定义(而不是模板定义)。如果您只有一个小函数需要专门化,虽然这有点烦人,但有时您可能会忘记在该 .cpp 文件中查找最后一个定义,这可能会导致混淆。

在这种情况下,最好在头文件中包含一个专门化和模板定义的其余部分。有什么技巧可以实现这一目标吗?

最佳答案

使用 inline 关键字:

template <unsigned N>
unsigned get_const()
{
    return N;
}

template <>
inline unsigned get_const<42>()
{
    throw "meaning of life";
}

关键字表示多个定义应该假定为相同,因此不是错误。 (这与 static 正交,它在自己的翻译单元中保留重复定义。)

请注意,这适用于所有函数,而不仅仅是模板或特化。

关于c++ - 有什么方法可以诱使编译器允许头文件中的模板特化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7340182/

相关文章:

c++ - 谁在 epoll_wait() 中分配用于处理的事件/接口(interface) id

templates - Sitecore 内容编辑器 - 更新到未反射(reflect)在实例中的模板上的标准值

c++ - 使用多个类型名称时未选择模板类型的模板特化

c++ - Visual Studio 错误 C2327

c++将序列上限传递给可变函数模板

c++ - 传递 const 大小的二维数组

C++ - 如何为类模板声明函数模板友元

c++ - 为什么 cout 的访问冲突和 printf 的堆栈溢出

c++ - 为什么在类中添加新的成员变量后需要进行重建?

javascript - AngularJS:包装指令并传递属性