是否可以在一行中获取第一种类型的参数包?

问题描述 投票:0回答:3

我有一个在可变参数类模板中给出的参数包,并且想要提取第一个类型。

目前我这样做,效果很好,但有点麻烦。是否可以更简单地完成同样的事情?

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;
    
   // ...
};
c++ variadic-templates c++17
3个回答
31
投票

你可以写:

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

或者你可以使用Boost.Mp11:

using FirstEntityType = mp_front<EntityContext>;

12
投票

您可以使用

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

0
投票

在c++-26中可以简单地写

EntityTs...[0]

参见 https://en.cppreference.com/w/cpp/language/pack_indexing

© www.soinside.com 2019 - 2024. All rights reserved.