假设我有两种类型,每种类型都有一个内部类型:
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
实现此目标的正确方法是什么?
答案 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
将其全部包装起来。