我有一个比较复杂的对象,

MyNamespace::MyClass::MySubStruct

有一个
enum
{
   ONE = 1,
   TWO = 2
};

现在我有另一个带有模板参数的类
template <unsigned int x> class Foo;

目前我按如下方式初始化B
Foo<MyNamespace::MyClass::MySubStruct::ONE> MyFoo

并且效果很好,但是它有点太冗长,特别是考虑到我将此类初始化了大约一百次。

我想写一些类似的东西:
typedef MyNamespace::MyClass::MySubStruct::ONE  MyONE
Foo<MyOne> MyFoo

自然,它不会编译,也不会在类内部将其声明为const unsigned int。一个人如何优雅地做到这一点?

最佳答案

枚举器是值,而不是类型。如果只需要此特定的枚举数,则声明一个常量:

const auto MyONE = MyNamespace::MyClass::MySubStruct::ONE;

如果您不仅需要这个,还可以为MySubStruct添加一个typedef并通过它访问枚举器。

10-06 04:06