簡體   English   中英

將所有 boost 融合映射鍵收集到一個 std::tuple 中

[英]Collect all boost fusion map keys into a std::tuple

考慮這個片段:

#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;
}

演示

我想將boost::fusion::map所有鍵類型收集到std::tuple

此代碼段中的鍵是MyEvents::EventAMyEvents::EventB ,因此AllKeys = std::tuple<MyEvents::EventA, MyEvents::EventB>

如何通過模板專業化來做到這一點? 我需要某種遞歸調用嗎?

您可以使用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...>;
};

演示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM