閱讀了關於模板之後,我對它們的編譯感到困惑。例如,在一個頭,我們定義一個模板 -多個目標文件中的C++模板和彙編
template<typename T>
class Object {
public:
Object();
void hashCode(T& arg){ /* implementation code in header-only. */ }
};
我們使用這個模板在兩個源文件 - SourceI.cpp & SourceII.cpp通過包括Object.hpp -
SourceI.cpp
void doSomething()
{
Object<int> intHasher;
intHasher.hashCode();
// Further code...
}
SourceII.cpp
void doNothing()
{
Object<int> notUsedHere;
notUsedHere.hashCode();
}
編譯應該產生「int」類型的類實例化代碼。 Object <int>類型的代碼將存儲在哪裏。或者將對象<int> :: hashCode()的代碼在所有用途中內聯?
如果代碼沒有內聯,那麼符號衝突會不會鏈接,因爲它們會出現在多個對象文件中?
注意 - 代碼是給出一個例子,並沒有顯示任何目的。
相關:https://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file – user0042