【问题标题】:Is it possible to get the first type of a parameter pack in a one-liner?是否有可能在单行中获得第一种类型的参数包?
【发布时间】:2017-08-08 21:44:36
【问题描述】:

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

目前我这样做,效果很好,但有点麻烦。是否可以更简单地做同样的事情? 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


    【解决方案1】:

    你可以写:

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

    或者你可以使用 Boost.Mp11:

    using FirstEntityType = mp_front<EntityContext>;
    

    【讨论】:

    • 这对 SFINAE 是否友好,如果是,在哪个版本的 C++ 中?
    • @Yakk 我们不在即时环境中,所以没关系吗?
    • 第一个解决方案应该如何使用?
    • @Enlico 你是什么意思?就……照原样。
    • 是的,对不起,谁知道我到底做错了什么。
    【解决方案2】:

    你可以使用

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-09
      • 2018-11-16
      • 2019-02-12
      • 1970-01-01
      相关资源
      最近更新 更多