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

标签 c++ templates enums typedef shorthand

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

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 并通过它访问枚举器。

关于c++ - 缩短 C++ 枚举成员的路径(使用 typedef 或 typename),用作模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27227584/

相关文章:

C++ 构造要求一个未在 .h 中定义的结构

c++ - 用 i++ 或++i 写循环

templates - 嵌套云形成 - 将嵌套堆栈模板传递到主模板中

JQuery:如何将事件附加到模板对象?

c++ - 重新声明类名 class-key

xcode - Swift 编程语言枚举实验

c++ - 为什么 std::not1() 通过 const 引用而不是值来获取参数?

c++ - 当应用于命名空间范围内的类时,静态意味着什么?

c# - 从 c# 打开 .exe(c 程序)

c - 多个文件共享的 C 头文件中的枚举