簡體   English   中英

從C ++中的模板參數繼承時,無法訪問基類的枚舉

[英]Cannot access base class' enum when inherit from a template parameter in C++

我的以下代碼有問題:

class SymmetryTypes
{
    public:
        enum Type { REAL, COMPLEX, INTEGER, PATTERN, UNINITIALIZED };

        void f() { cout << "SymmetryTypes::f() invoked" << endl; };
};

template <class T>
class EnumBase : public T
{
    public:
        EnumBase() /* : t_(T::UNINITIALIZED) */ { T::f(); }

    private:
        // T::Type t_;
};

int main(int argc, char* argv[])
{
    EnumBase<SymmetryTypes> symmetry;
    return 0;
}

它可以編譯,但是當我取消注釋時就不會編譯。 看來我可以訪問基類T的函數成員,但不能訪問枚舉成員及其值(也嘗試過typedef)。 你知道為什么嗎?

T::Type用於引用類型,因此您需要typename

typename T::Type t_;

如果省略typename ,它會在解析模板時認為您聲明的成員的名稱為T::Type (然后它在t_處出錯,因為此后無法再使用第二個名稱)。 記住當時還不知道T是什么。 在這里可以找到更詳細的解釋。

成員初始化程序很好。 成員聲明無效可能會使編譯器感到困惑。

暫無
暫無

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

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