对昨晚的回答进行跟进 - 我希望有更多的评论可以为我解答,但没有骰子。
有没有办法在没有继承的情况下实现这一点,而不需要在下面的倒数第二行代码中使用繁琐的代码,这会将值写入cout
?
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 :(得分:3)
这有帮助吗?
struct A {
enum E {
X, Y, Z
};
};
template <class T>
struct B : private T{ // private inheritance.
public:
using T::X;
};
// basically "import" the A::E enum into B.
int main(void)
{
B<A>::X; // Simpler now?
return 0;
}
答案 1 :(得分:2)
将名称enum
值名称直接放入类中的唯一方法是从具有这些名称的类继承。
您展示的代码似乎使用Microsoft语言扩展程序。
在C ++ 98中,enum
typename不能用于限定其中一个值名称:
Comeau C/C++ 4.3.10.1 (Oct 6 2008 11:28:09) for ONLINE_EVALUATION_BETA2 Copyright 1988-2008 Comeau Computing. All rights reserved. MODE:strict errors C++ C++0x_extensions "ComeauTest.c", line 17: error: name followed by "::" must be a class or namespace name... Wild guess: Did you #include the right header? std::cout << B<A>::E::X << std::endl; ^ 1 error detected in the compilation of "ComeauTest.c".
所以不是......
typedef typename T::E E;
......做......
typedef T E;
干杯&amp;第h。,