簡體   English   中英

C ++類模板繼承之謎

[英]C++ class template inheritance puzzle

這段代碼出了什么問題? gcc 4.6.1抱怨“boo()中未在此范圍內聲明''foo'”。 如果我轉換代碼以使其中一個模板只是一個普通類,則問題就會消失。

struct Foo {
    char foo;
};

template<int N>
struct Bar : public Foo
{
    Bar() { foo; }
};

template<int N>
struct Baz : public Bar<N>
{
    void baz() { foo; }
};

int main() {
    Baz<10> f;
    return 0;
}

有什么問題,根據規范,我不知道,但您可以使用以下代碼編譯代碼:

void baz() { Bar<N>::foo; }

foo是一個從屬名稱; 也就是說,它取決於模板參數,因此在實例化模板之前,編譯器不知道它是什么。 你必須明確它是一個類成員, Bar<N>::foothis->foo

(你可能也想用它做一些事情;只是使用它作為表達式的忽略值根本不做任何事情)。

暫無
暫無

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

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