![](/img/trans.png)
[英]Non-template methods of a template class in .cpp file - Undefined reference?
[英]Implement template member of non-template class in cpp file
我有一堂課:
// A.h
class A
{
void foo();
template <class T> void bar( T someVar );
}
#include "A.tcpp"
構建它時,出現鏈接器錯誤。 但是,如果整個類都是模板,那么上面的示例將構建得很好。 所以我的問題是:
使用模板成員函數而不使用模板類時,如何堅持在cpp文件中具有所有定義的模式?
如果要將具有模板功能和非模板功能的類拆分為頭文件和tcpp文件,則只需將模板定義放在tcpp文件中。 非模板定義仍然需要放入常規cpp文件中。
將非模板代碼放入tcpp文件中,會將其重新包含在頭文件中,這意味着它將在包含在其中的每個翻譯單元中進行定義。
在這種情況下,這意味着您應該
// A.h
class A
{
void foo();
template <class T> void bar( T someVar );
}
#include "A.tcpp"
// A.tcpp
template <class T> void A::bar( T someVar ) { some code; }
// A.cpp
#include "A.h"
void A::foo() { some code; }
我找到了解決方案,它雖然不盡如人意,但對我而言還是可以的。 我們可以在tcpp文件的末尾插入以下行:
template void A::bar<int>( int );
// And so on, for all types that should be supported.
稱為功能模板實例化 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.