Можно ли получить первый тип пакета параметров в одну строку?

У меня есть пакет параметров, заданный в классе вариативного шаблона, и я хочу извлечь первый тип.

В настоящее время я делаю это, что отлично работает, но как-то громоздко. Можно ли то же самое сделать проще? 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;
    
   // ...
};

person dani    schedule 08.08.2017    source источник


Ответы (2)


Вы можете написать:

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

Или вы можете использовать Boost.Mp11:

using FirstEntityType = mp_front<EntityContext>;
person Barry    schedule 08.08.2017
comment
Подходит ли этот SFINAE, и если да, то в какой версии C++? - person Yakk - Adam Nevraumont; 09.08.2017
comment
@Yakk Мы не в непосредственном контексте, так что не имеет значения? - person Barry; 09.08.2017
comment
Как предполагается использовать первое решение? - person Enlico; 04.06.2021
comment
@Enlico Что ты имеешь в виду как? Просто... как есть. - person Barry; 04.06.2021
comment
Да, извините, кто знает, что, черт возьми, я делал не так. - person Enlico; 04.06.2021

Вы можете использовать

std::tuple_element<0, std::tuple<EntityTs...>>::type
person Jarod42    schedule 08.08.2017