基本上这就是我想做的事情:
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
答案 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;
};