对于罗嗦/过长的问题感到抱歉,但我不知道怎么说这个。
我上课了。此类扩展了模板化的基类。我想使用在派生类中声明的枚举作为模板参数之一。不是它的价值,实际的枚举,虽然我怀疑这有所不同。如果我尝试这样做,我会得到一个C2065未声明的标识符错误,例如在这个简化的示例中。
template<class Value>
class Base
{
public:
Value foo;
}
class Derived : public Base<Derived::Colors>
{
enum Colors
{
blue,
red,
}
}
我已经尝试过四处寻找,并发现如果枚举在一个类中是不可向前声明的,所以我不知道该怎么做。让这样一个用例不受支持似乎是一个非常大的疏忽,所以有没有办法做到这一点?在我的实际代码中,我宁愿将这个枚举保留在我的课程中,因为它与其功能密切相关。
答案 0 :(得分:0)
因此,事实证明,至少在C ++ 11中,这是不可能的。人们需要做类似的事情:
template<class Value>
class Base
{
public:
Value foo;
}
// Does not compile
enum Derived::Colors;
class Derived : public Base<Derived::Colors>
{
enum Colors
{
blue,
red,
}
}
在将Colors
添加为模板参数之前将其知晓。但是,由于前向声明与枚举一起使用的方式,这是不可能的。基本上,如果它们是在类中声明的,那么标准明确禁止它们在该类之外向前声明。