जाहिर है, यदि आप एक अच्छी तरह से गठित कार्यक्रम में प्रकार void
का एक उदाहरण नहीं हो सकता है, तो निम्नलिखित घोषणा की तरह कुछ संकलन नहीं होगा:शून्य प्रकार :: टपल
std::tuple<void, double, int> tup;
लेकिन, जैसा कि जब तक हम ऑब्जेक्ट्स के विरोध में सख्ती से व्यवहार कर रहे हैं, तब तक कोई समस्या नहीं है। उदाहरण के लिए, मेरी संकलक (जीसीसी) की सुविधा देता है मुझे कहते हैं:
typedef std::tuple<void, double, int> tuple_type;
यह मेरे लिए दिलचस्प है क्योंकि ऐसा लगता है कि C++ 0x के साथ हम सिर्फ std::tuple
उपयोग कर सकते हैं मेटा प्रोग्रामिंग चाल का एक बहुत प्रदर्शन करने के लिए कि पहले boost::mpl
पुस्तकालय की आवश्यकता होगी। उदाहरण के लिए, हम प्रकार के वेक्टर बनाने के लिए std::tuple
का उपयोग कर सकते हैं।
उदाहरण के लिए, हम एक समारोह हस्ताक्षर का प्रतिनिधित्व प्रकार की एक वेक्टर बनाना चाहते हैं:
हम सिर्फ कह सकते हैं:
template <class R, class... Args>
struct get_function_signature;
template <class R, class... Args>
struct get_function_signature<R(*)(Args...)>
{
typedef std::tuple<R, Args...> type;
};
यह काम करने के लिए, भले ही समारोह हस्ताक्षर एक void
है लगता है टाइप करें, जब तक हम वास्तव में get_function_signature<F>::type
के उदाहरण को तुरंत चालू नहीं करते हैं।
हालांकि, सी ++ 0x अभी भी मेरे लिए नया है, और निश्चित रूप से सभी कार्यान्वयन अभी भी कुछ प्रयोगात्मक हैं, इसलिए मैं इसके बारे में थोड़ा असहज हूं। क्या हम वास्तव में मेटा-प्रोग्रामिंग के लिए प्रकार के वेक्टर के रूप में std::tuple
का उपयोग कर सकते हैं?
मुझे उम्मीद है कि 'boost :: mpl :: vector' को बहिष्कृत किया जाएगा। वैसे भी 'बूस्ट :: एमपीएल' कार्यक्षमता और टेम्पलेट मेटाप्रोग्रामिंग में से अधिकांश सामान्य रूप से बदल जाएंगे जब विविध टेम्पलेट्स के लिए समर्थन बढ़ेगा। –