如何使用任意类型的元函数转换hana :: tuple_t?

时间:2018-12-14 03:41:16

标签: c++ boost-hana

假设我有两种类型,每种类型都有一个内部类型:

struct A1{
    using type = int;
};
struct B1{
    using type = double;
};

我从自己的班级(例如hana::tuple_t)创建了一个auto Types = hana::tuple_t<A1, B1>,并且希望获得与班级内部类型(例如hana::tuple_t)相似的hana::tuple_t<A1::type, B1::type>

我想使用transform函数来获取结果tuple_t:

auto result = hana::transform(Types, [](auto t){return t::type;});

我收到编译错误:

error: ‘t’ is not a class, namespace, or enumeration

使用hana::tranform实现此目标的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

您可以使用pthread_create

hana::template_

template<typename O> using inner_type = typename O::type; auto result = hana::transform(Types, hana::template_<inner_type>); 产生一个tuple_t,其中不能包含 types 。相反,它包含tuple,它们是表示类型的hana::type将类型级别的功能(template_类型别名或类)转换为值级别的“元功能”。如果您想为template使用显式的lambda,可以,但是很糟糕:

transform

对于某些auto result = hana::transform(Types, [](auto t) { return hana::type_c<typename decltype(t)::type::type>; }) ,lambda中t的类型为hana::type<T>,因此T从值中解包该类型,第一个decltype(t)得到{ {1}},第二个::type获取您的目标类型,然后T将其全部包装起来。