我想创建一个模板,我可以在其中输入索引,它将为我提供该索引的类型.我知道我可以这样做,decltype(std::get<N>(tup))但我想自己实现.例如,我想这样做,
typename get<N, std::tuple<int, bool, std::string>>::type;
Run Code Online (Sandbox Code Playgroud)
...它会给我位置的类型N - 1(因为数组从0开始索引).我怎样才能做到这一点?谢谢.
我怎样才能得到std::typeindex当前类型的帮助?
假设我有一个变体:
\n\nusing variant_t = std::variant<int, float, bool, double, std::string>;\nRun Code Online (Sandbox Code Playgroud)\n\n我希望能够创建该函数:
\n\nstd::typeindex get_held_type(const variant_t& var);\nRun Code Online (Sandbox Code Playgroud)\n\n这只是出于好奇,我知道这不是处理变体数据的常用方法。
\n\n如果我添加另一种类型variant_t,我不想更改任何其他代码。即,类型需要自注册。
到目前为止,这是我的尝试。我有点作弊,因为我使用映射而不是函数,并且必须构造一个对象才能在运行时注册类型。
\n\n#include <iostream>\n#include <variant>\n#include <string>\n#include <vector>\n#include <typeindex>\n#include <map>\n\nusing variant_t = std::variant<int, float, bool, double, std::string>;\nstatic constexpr size_t variant_t_size = std::variant_size<variant_t>();\nstatic auto get_held_type = std::map<size_t, std::type_index>{};\n\n//loop across all types in the variant\ntemplate<size_t N>\nstruct crtp : crtp<N - 1>{\n //ctor\n crtp(){\n get_held_type[N] = std::type_index(typeid (std::get<N>(variant_t{})));\n }\n};\n\ntemplate<>\nstruct crtp<0>{\n //ctor\n crtp(){\n get_held_type[0] = std::type_index(typeid (std::get<0>(variant_t{})));\n …Run Code Online (Sandbox Code Playgroud)