假设您有一个简单的模板函数(为了简单起见,不是类成员),在同一个 .h 文件中具有特定于类型的特化...
template <class TYPE>
void some_function(TYPE& val)
{
// some generic implementation
}
template <>
inline void some_function<int>(int& val)
{
// some int specific implementation
}
除非您明确指示编译器inline
特化(inline
关键字),否则如果 .h 文件被多次包含(至少我是这样),您将收到链接错误在 Visual C++ 2008 中)。
我们都知道inline
只是给编译器的一个建议,它可以忽略。在这种特殊情况下,是否允许编译器忽略此建议并让链接器失败?
最佳答案
如果您不使用inline
,那么同一个函数会通过extern
链接编译成多个.obj
文件,这会导致链接器抛出重复符号错误。
这与编译器是否实际上内联编译你的函数无关,因为它可以将它视为一个static
函数,并使每个实现对每个编译单元都是私有(private)的.但是,您不能为此目的使用 static
,因为它在成员函数上有其他含义,因此 inline
是您唯一的选择。
关于c++ - 在模板特化的情况下,是否允许编译器忽略内联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1760291/