[英]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::EventA
和MyEvents::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.