是否可以在单行中获得第一类参数包?

时间:2017-08-08 21:44:37

标签: c++ variadic-templates c++17

我在可变参数模板类中给出了一个参数包,并希望提取第一个类型。

目前我这样做,效果很好,但有点麻烦。有可能做同样的事情更简单吗? FirstEntityType应定义为EntityTs中第一个类型的类型。注意,我想保留类模板的签名。我知道可以写template<typename FirstEntityType, typename... OtherEntityTypes>,但这是我不想做的事情。

template<typename... EntityTs>
class EntityContext
{
    template<typename T, typename ... Ts>
    struct K {
        using type = T;
    };

    using FirstEntityType = typename K<EntityTs...>::type;

   // ...
}

2 个答案:

答案 0 :(得分:15)

你可以写:

using FirstEntityType = std::tuple_element_t<0, std::tuple<EntityTs...>>;

答案 1 :(得分:5)

您可以使用

std::tuple_element<0, std::tuple<EntityTs...>>::type