簡體   English   中英

可以在C ++標頭中實現類模板的非模板嵌套類嗎?

[英]Can non-templated nested classes of class templates be implemented in a C++ header?

假設頭文件myheader.hxx定義了一個類模板A在其中定義了非模板類B (不依賴於A的template參數):

template<class T>
class A {
    class B { 
        // ...
    };
};

在這種情況下可以在myheader.hxx實現B還是可以的,或者是否需要編寫一個單獨的myheader.cxx以避免鏈接時出現重復的定義? 這種情況是否由不同的編譯器一致處理?

即使它不是頂層模板,它仍然是模板(或模板的一部分,不知道超精確的定義),因此您需要在標頭中實現它(從技術上講,它可以在源代碼中)文件,如果那是唯一使用的地方,但這可能會破壞目的)。

注意:如果不打算在類定義中內聯實現其成員函數,則需要以下語法:

template<typename T>
void A<T>::B::foo(...)
{
    // ...
}

另外,因為它是在之前提出的,所以如果B碰巧有自己的模板參數,它將類似於:

template<typename T>
template<typename T2>
void A<T>::B<T2>::foo(...)
{
    // ...
}

不:

template<typename T, typename T2>
void A<T>::B<T2>::foo(...)
{
    // ...
}

或者如果B沒有,但是B::foo做了,那就是:

template<typename T>
template<typename T2>
// void A<T>::B::foo<T2>(...) // not this apparently
void A<T>::B::foo(...)
{
    // ...
}

編輯 :顯然,它是函數的foo而不是foo<T2> ,至少在GCC中(因此幾乎100%確保這是標准行為)...我確定某些語言律師將能夠解釋原因:)

等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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