Ian*_*Ian 2 c++ enums tuples c++14
当尝试通过作用域和类型枚举访问元组的值时,我得到一个错误,指出没有匹配的类型std::get
.
enum class User: std::size_t {
FirstName = 1,
LastName = 2,
};
std::tuple<std::string, std::string> user("Bobby", "Bean");
// Error
std::cout << std::get<User::FirstName>(user) << std::endl;
Run Code Online (Sandbox Code Playgroud)
鉴于std::get
期望类型std::size_t
和枚举的基础类型也是std::size_t
,为什么这会失败?
我知道我可以转换枚举的值,但我不确定为什么这两个基本类型是相同的.有了无范围的枚举,这很好用.
枚举类实际上不是表面上的整数.就像只包含int的结构不是一个int.
回到整数表示的C++标准方法是这样的:
using UserUndT = std::underlying_type<User>::type;
std::cout <<
std::get<static_cast<UserUndT>(User::FirstName)>(user) << std::endl;
Run Code Online (Sandbox Code Playgroud)
另外,请查看此问题:在VS2012中使用函数签名中的enable_if和underlying_type
另一个值得考虑的选择:(C++ 14)
#include <iostream>
#include <tuple>
struct FirstName {
std::string val;
};
struct LastName {
std::string val;
};
using FullName = std::tuple<FirstName,LastName>;
int main() {
auto user = FullName({"John"},{"Deer"});
std::cout << std::get<FirstName>(user).val << std::endl;
std::cout << std::get<LastName>(user).val << std::endl;
}
Run Code Online (Sandbox Code Playgroud)