gpt4 book ai didi

c++ - 从 C++ 中的模板参数继承时无法访问基类的枚举

转载 作者:行者123 更新时间:2023-12-02 19:38:13 27 4
gpt4 key购买 nike

我的以下代码有问题:

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 是什么。更详细的解释can be found here

成员初始值设定项很好。编译器可能会对无效的成员声明感到困惑。

关于c++ - 从 C++ 中的模板参数继承时无法访问基类的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5133732/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com