इस स्निपेट पर विचार करें:
#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>
।
टेम्पलेट विशेषज्ञता के साथ कोई ऐसा कैसे कर सकता है? क्या मुझे किसी प्रकार की पुनरावर्ती कॉल की आवश्यकता है?
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...>;
};
संबंधित सवाल
नए सवाल
c++
C ++ एक सामान्य-प्रयोजन प्रोग्रामिंग भाषा है। यह मूल रूप से C के विस्तार के रूप में डिज़ाइन किया गया था और इसमें एक समान सिंटैक्स है, लेकिन यह अब पूरी तरह से अलग भाषा है। C ++ कंपाइलर के साथ संकलित कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें। विशिष्ट मानक संशोधन [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] या [C ++ 23], आदि से संबंधित प्रश्नों के लिए संस्करण-विशिष्ट टैग का उपयोग करें। ।