基本上这就是我想做的:
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/