【发布时间】:2021-10-16 12:47:30
【问题描述】:
我有一个 std::tuple 形式的类型列表
struct A { struct data_type {}; };
struct B { struct data_type {}; };
struct C { struct data_type {}; };
struct D { struct data_type {}; };
//etc
using my_typelist = std::tuple<A, B, C, D>;
我定义了元组的变量,包含内部类型。像这样的
std::tuple<A::data_type, B::data_type, C::data_type, D::data_type> data;
但简单的解决方案不起作用(https://ideone.com/c8a2FE):
#include <tuple>
#include <iostream>
struct A { using data_type = int; };
struct B { using data_type = char; };
// error: template argument for template type parameter must be a type
template < typename... Ts >
using cvt_2_data = std::tuple< Ts::data... >;
void main()
{
using my_typelist = std::tuple<A, B>;
cvt_2_data<my_typelist> data;
std::cout
<< std::get<A::data_type>(data) << " "
<< std::get<B::data_type>(data) << std::endl;
}
我也试过这个,更复杂的方法,但没有这样的运气
std::tuple< (Ts::data)... >;
std::tuple< decltype(Ts)::data... >;
顺便说一下,我需要 C++17 的解决方案
【问题讨论】:
-
typename Ts::data... -
是的,“typename Ts::data...”很重要,但还不够
标签: c++ templates c++17 variadic typelist