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



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

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

相关内容

  • 没有找到相关文章

最新更新