तो मेरे पास एक टेम्पलेट क्लास है जिसे मैं एक std :: मानचित्र स्वीकार करना चाहता हूं जहां डेटा प्रकार या तो कच्चे सूचक या std :: unique_ptr है। तो फिर इस वर्ग में मैं अंतर्निहित सूचक के प्रकार प्राप्त करना चाहते हैं:टेम्पलेट मेटाप्रोग्रामिंग मूल्यांकन
typedef typename boost::mpl::if_<
boost::is_pointer<typename Container::mapped_type>,
typename Container::mapped_type,
typename Container::mapped_type::element_type*
>::type data_type
जब कक्षा एक कच्चे सूचक प्रकार के साथ एक मानचित्र का उपयोग instantiating हालांकि मैं निम्नलिखित त्रुटि मिलती है:
error: 'std::map<int, ValueType*>::mapped_type {aka ValueType*}' is not a class, struct, or union type
यह मुझे लगता है कि यह कच्चे सूचक पर typename Container::mapped_type::element_type*
का मूल्यांकन कर रहा है, मैंने सोचा था कि टेम्पलेट मेटाप्रोग्रामिंग के साथ यह मूल्यांकन नहीं करेगा कि जब if_ सफल हुआ। क्या मुझे इस बारे में एक अलग तरीके से जाना चाहिए?
धन्यवाद! यह समझ में आता है, आलसी अगर समझ में आता है लेकिन मुझे वास्तव में समझ में नहीं आता है कि आपको पहचान और extract_element_type क्यों चाहिए? –
grivescorbett
@grivescorbett: 'if_' की तरह सीधे प्रकारों की बजाय,' eval_if' असामान्य मेटाफंक्शन जो _produce_ प्रकार लेता है। उस आलसी मूल्यांकन/तत्काल मेटाफंक्शन की तत्कालता यह है कि आपको जिस तरीके से आवश्यकता है, वह काम करता है। – ildjarn
आह, यह मेरी पहली बार एमपीएल का उपयोग कर रहा है, जो जानता था कि यह इतना गड़बड़ हो सकता है? – grivescorbett