c++ - 类似于枚举的 using 声明?

标签 c++ enums using

基本上这就是我想做的:

struct A {
    enum E {
        X, Y, Z
    };
};

template <class T>
struct B {
    using T::E;
};

// basically "import" the A::E enum into B.
std::cout << B<A>::X << std::endl;

原因是我想基本上将实现细节注入(inject)到我的模板类中。同时,“模型”的枚举反射(reflect)了我希望用户能够针对模板的特定实例化获得的信息。这可能吗?

我知道我可以让 B 继承自 A,但我认为这不是一个理想的解决方案,因为我希望能够添加新的“模型”无需更改 B 的内容。

编辑: 既然我已经考虑过了,不一定需要排除继承。也许以下是理想的:

struct A {
    enum E {
        X, Y, Z
    };
};

template <class T>
struct B : A {
};

int main() {
    std::cout << B<A>::X << std::endl;
}

最佳答案

这对我有用:

struct A {
    enum E {
        X, Y, Z
    };
};

template <class T>
struct B {
    typedef typename T::E E;
};

// basically "import" the A::E enum into B.
int main(void)
{
    std::cout << B<A>::E::X << std::endl;
    return 0;
}

输出是

0

我确实收到了有关该限定名称中的非标准扩展的警告,因此也许有更优雅的解决方案。

关于c++ - 类似于枚举的 using 声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3983800/

相关文章:

c - 当位域宽度小于需要时,整数位域的值交替等于0或1

c++ - 对 std::vector::iterator 使用 vs. typedef

c++ - 是否有私有(private)使用名称=类型;

c++ - 如何将顶点添加到 OpenGL C++ triangle_fan

c++ - 如何知道一个类是否继承了其他抽象类?

C++:新放置与自己的新重载发生冲突

c++ - 访问没有字符的字符串的第一个字符

c++ - 如何将无效的用户输入与枚举列表中的最后一个值映射?

java - Java中逻辑复杂的EnumSet

c++ - 在 visual studio 2012 (C++) 中使用 .lib