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

C++ 缩短到C+的路径+;枚举成员(使用typedef或typename),用作模板参数,c++,templates,enums,typedef,shorthand,C++,Templates,Enums,Typedef,Shorthand,我有一个相当复杂的物体 MyNamespace::MyClass::MySubStruct 它有一个 enum { ONE = 1, TWO = 2 }; 现在我有了另一个类,它有一个模板参数 template <unsigned int x> class Foo; 模板类Foo; 目前我初始化B如下 Foo<MyNamespace::MyClass::MySubStruct::ONE> MyFoo foomyfoo 这很好,但是有点太长了,特别是

我有一个相当复杂的物体

MyNamespace::MyClass::MySubStruct
它有一个

enum
{
   ONE = 1,
   TWO = 2
};
现在我有了另一个类,它有一个模板参数

template <unsigned int x> class Foo;
模板类Foo;
目前我初始化B如下

Foo<MyNamespace::MyClass::MySubStruct::ONE> MyFoo
foomyfoo
这很好,但是有点太长了,特别是考虑到我初始化这个类大约一百次

我想写一些类似于:

typedef MyNamespace::MyClass::MySubStruct::ONE  MyONE
Foo<MyOne> MyFoo
typedef MyNamespace::MyClass::MySubStruct::一个MyONE
福美福

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

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

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

如果您需要的不仅仅是这一个,那么可以为
MySubStruct
添加一个typedef并通过它访问枚举数;这是一个价值观

您可以简单地使用常量,而不是使用
typedef

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

也可以考虑使用
enum类
而不是
enum

如果您找到了问题的解决方案,请将其作为答案发布。(如果其他人发布了解决方案,请将其答案标记为已接受)不要将其编辑到问题中。:)谢谢你,jalf,对不起,我还不知道规则