Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: daniОтветов: 2

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

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

Ответы

Ответ 1 · рейтинг 22 · Barry

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

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

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

using FirstEntityType = mp_front<EntityContext>;

Ответ 2 · рейтинг 6 · Jarod42

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы