通常,当您编写模板类并对该类中的函数进行特化时,您需要将特化放在 .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/