我有一个相当复杂的对象,
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 无符号 int。一个人如何优雅地做到这一点?
枚举器是值,而不是类型。如果只需要此特定枚举器,请声明一个常量:
const auto MyONE = MyNamespace::MyClass::MySubStruct::ONE;
如果你需要的不仅仅是这个,那么为MySubStruct
添加一个 typedef 并通过它访问枚举器是可行的。
ONE
不是一个类型,而是一个值。
与其使用 typedef
,不如简单地使用一个常量:
const auto MyONE = MyNamespace::MyClass::MySubStruct::ONE;
还考虑使用 enum class
而不是 enum
。