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