看完模板后,我对它们的编译感到困惑。例如,在标题中我们将模板定义为 -
template<typename T>
class Object {
public:
Object();
void hashCode(T& arg){ /* implementation code in header-only. */ }
};
我们通过包含 Object.hpp 在两个源文件中使用此模板 - SourceI.cpp 和 SourceII.cpp -
源代码.cpp
void doSomething()
{
Object<int> intHasher;
intHasher.hashCode();
// Further code...
}
源II.cpp
void doNothing()
{
Object<int> notUsedHere;
notUsedHere.hashCode();
}
编译应该为“int”类型的类实例化生成代码。 Object
如果代码不是内联的,那么符号会不会在链接时发生冲突,因为它们会出现在多个目标文件中?
注意 - 该代码仅供示例,不显示任何用途。
最佳答案
当您编译它时,SourceI.cpp 和 SourceII.cpp 都会有一个 Object
当您链接它时,链接器将假定 Object
关于多个目标文件中的 C++ 模板和编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47364593/