【问题标题】:Collect all boost fusion map keys into a std::tuple将所有 boost fusion map 键收集到一个 std::tuple
【发布时间】:2021-10-20 09:13:40
【问题描述】:

考虑一下这个sn-p:

#include <boost/fusion/container/map.hpp>
#include <boost/fusion/sequence/intrinsic/at_key.hpp>
#include <boost/fusion/sequence/intrinsic/value_at_key.hpp>
#include <tuple>

struct MyEvents {
    struct EventA;
    struct EventB;
    using EventMap = boost::fusion::map<boost::fusion::pair<EventA, int>,
                                        boost::fusion::pair<EventB, double>>;
};

template <typename T>
struct GetTypes;

template <typename T>
struct GetTypes<boost::fusion::map<...>> {
    using type = std::tuple<...>;
};

int main() {
    using Map = typename MyEvents::EventMap;
    using AllKeys = GetTypes<Map>::type;

    return 0;
}

Demo

我想将boost::fusion::map 中的所有密钥类型收集到std::tuple 中。

这个sn-p中的键是MyEvents::EventAMyEvents::EventB,所以AllKeys = std::tuple&lt;MyEvents::EventA, MyEvents::EventB&gt;

如何使用模板专业化来做到这一点?我需要某种递归调用吗?

【问题讨论】:

    标签: c++ template-meta-programming boost-fusion


    【解决方案1】:

    您可以使用T::first_type获取boost::fusion::pair的密钥类型。

    template <typename T>
    struct GetTypes;
    
    template <typename... Pairs>
    struct GetTypes<boost::fusion::map<Pairs...>> {
        using type = std::tuple<typename Pairs::first_type...>;
    };
    

    Demo.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多