मुझे एक एमपीएल :: समान प्रक्रिया की तरह आवश्यकता है जो प्रकारों पर रिकर्सन का समर्थन करता है।सी ++ रिकर्सिव एमपीएल :: बराबर समस्या?
namespace mpl = boost::mpl;
BOOST_MPL_ASSERT((mpl::equal<
mpl::vector<int, char>,
typename mpl::push_back<mpl::vector<int>, char>::type >)); // OK
ऊपर ठीक संकलित, हालांकि अगर मैं एमपीएल में इसका इस्तेमाल :: बदलने या एमपीएल :: गुना, विजुअल स्टूडियो 2010 RC1 शिकायत।
typedef mpl::vector<
mpl::vector<int, char>,
mpl::vector<char, char>> type_1;
typedef mpl::transform<
mpl::vector<
mpl::vector<int>,
mpl::vector<char>>,
mpl::push_back<mpl::_, char>>::type type_2;
BOOST_MPL_ASSERT((mpl::equal<type_1, type_2>)); // FAILS
हालांकि, ये काम ...
BOOST_MPL_ASSERT((mpl::equal<
typename mpl::at_c<type_1, 0>::type,
typename mpl::at_c<type_2, 0>::type>)); // OK
BOOST_MPL_ASSERT((mpl::equal<
typename mpl::at_c<type_1, 1>::type,
typename mpl::at_c<type_2, 1>::type>)); // OK
यह है कि एमपीएल :: बराबर गतिशील रूप से उत्पन्न पुनरावर्ती प्रकार पर काम नहीं करता है कि वहाँ कुछ मेरी वाक्य रचना के साथ गलत है, या है?
किसी भी सलाह की सराहना की जाएगी।
आगामी 'सी ++ 0x' के साथ मेटाप्रोग्रामिंग के लिए चीजें कैसे आसान हो रही हैं ... इसे खोजने के लिए बधाई, मुझे लगता है कि आपने वास्तव में इसे संकलित करने का प्रयास किया है? –
ठीक है, मैं पहले इस समस्या में भाग गया। लेकिन इस पर ध्यान दिए बिना, आप हमेशा mpl :: प्रिंट का उपयोग कर सकते हैं ताकि संकलक को चेतावनी उत्पन्न हो सके जो वास्तविक प्रकार के टी –
hkaiser
धन्यवाद देता है! मैं mpl :: प्रिंट के बारे में कभी नहीं जानता था, दस्तावेज़ों में कहीं भी नहीं है। यह एक असली lifesaver है। –
kyunghoon