像枚举的使用声明?

时间:2010-10-21 02:10:31

标签: 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;

原因是我想基本上将实现细节注入我的模板类。同时,“模型”的枚举反映了我希望用户能够具有模板的特定实例的信息。这可能吗?

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

编辑:现在我已经知道了,继承并不一定需要排除。也许以下是理想的:

B

2 个答案:

答案 0 :(得分:2)

这对我有用:

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

我确实收到了关于该标准名称的非标准扩展的警告,所以也许有更优雅的解决方案。

答案 1 :(得分:1)

我认为你可以做到

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