【发布时间】:2019-01-30 15:00:09
【问题描述】:
为了使代码更具可读性,我使用tuple 执行了以下操作:
std::tuple<uint32_t, uint32_t, uint32_t> key;
enum tpl {
arg1 = 0, arg2 = 1, arg3 = 2
};
现在我可以写了:
auto _arg1 = std::get<tpl::arg1>(key);
我现在遇到一个问题。如果我写:
auto arg1 = std::get<tpl::arg1>(key);
变量arg1 已经是枚举。因此我想切换到:
enum class tpl: int {
arg1 = 0, arg2 = 1, arg3 = 2
};
但是这里有问题。编译器说:
错误 C2672: 'std::get': 找不到匹配的重载函数
std::get 中的这个索引是什么类型,可以在枚举类的定义中命名吗?
我试过了
const constexpr
const int
....
【问题讨论】:
-
The variable arg1 is already the enum不清楚。为什么会出现问题? -
@balki - 枚举标识符是
enum所在范围的成员(不是enum class)。所以这可能会导致冲突,除非引入某种范围。 -
balki:以上名称仅为示例。在实际项目中,有几个变量名称几乎相同。