簡體   English   中英

在cpp文件中實現非模板類的模板成員

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM