缩短C++枚举成员的路径(使用typedef或typename),以用作模板参数

Ale*_*ins 3 c++ enums templates typedef shorthand

我有一个相当复杂的对象,

MyNamespace::MyClass::MySubStruct
Run Code Online (Sandbox Code Playgroud)

有一个

enum
{
   ONE = 1,
   TWO = 2
};
Run Code Online (Sandbox Code Playgroud)

现在我有另一个具有模板参数的类

template <unsigned int x> class Foo;
Run Code Online (Sandbox Code Playgroud)

目前我按如下方式初始化B.

Foo<MyNamespace::MyClass::MySubStruct::ONE> MyFoo
Run Code Online (Sandbox Code Playgroud)

这很好,但它有点太冗长,特别是考虑到我将这个类初始化了大约一百次.

我想写一些类似的东西:

typedef MyNamespace::MyClass::MySubStruct::ONE  MyONE
Foo<MyOne> MyFoo
Run Code Online (Sandbox Code Playgroud)

当然,这不会编译,也不会将它声明为类中的const unsigned int.如何优雅地做到这一点?

Col*_*mbo 6

枚举器是值,而不是类型.如果您只需要这个特定的枚举器,请声明一个常量:

const auto MyONE = MyNamespace::MyClass::MySubStruct::ONE;
Run Code Online (Sandbox Code Playgroud)

如果您需要的不仅仅是这个,那么为此添加一个typedef MySubStruct并通过它访问枚举器是可行的.