我有一个在可变参数类模板中给出的参数包,并且想要提取第一个类型。
目前我这样做,效果很好,但有点麻烦。是否可以更简单地完成同样的事情?
FirstEntityType
应定义为具有 EntityTs
中第一个类型的类型。注意,我想保留类模板的签名。我知道可以写template<typename FirstEntityType, typename... OtherEntityTypes>
,但这是我不想做的事情。
template<typename... EntityTs>
struct EntityContext
{
template<typename T, typename ... Ts>
struct K {
using type = T;
};
using FirstEntityType = typename K<EntityTs...>::type;
// ...
};
你可以写:
using FirstEntityType = std::tuple_element_t<0, std::tuple<EntityTs...>>;
或者你可以使用Boost.Mp11:
using FirstEntityType = mp_front<EntityContext>;
您可以使用
std::tuple_element<0, std::tuple<EntityTs...>>::type