請參閱從升壓下面的代碼MPL轉換文檔:升壓轉換MPL序列「真正的」類型
typedef vector<char,short,int,long,float,double> types;
typedef vector<char*,short*,int*,long*,float*,double*> pointers;
typedef transform< types,boost::add_pointer<_1> >::type result;
BOOST_STATIC_ASSERT((equal<result,pointers>::value));
我想了解的boost::mpl
類型系統和「它實際上是如何工作的。」 據我所知mpl::equal
只是比較以下兩個序列的元素,而不是整個序列類型本身。 我不明白爲什麼以下故障:
BOOST_STATIC_ASSERT((std::is_same<result,pointers>::value)); //< assert fails
爲什麼結果類型不是100%相同的「指針」型? 我認爲這是因爲mpl正在執行轉換懶惰或結果只是一個序列,而不是一個向量? 是否有可能以某種方式強制mpl不再懶惰,並獲得100%相同的類型(我可以用這個結果自己寫一個轉換函數,但我想知道如何在mpl中完成)?
我已經嘗試了一些東西,例如在一個新的載體,但沒有成功插入結果:
BOOST_STATIC_ASSERT((std::is_same<
mpl::insert_range< mpl::vector<>, mpl::begin<mpl::vector<> >::type,
result >::type, pointers >::value)); //< assert fails too
而且,我試圖在轉換功能,這也失敗使用back_insert:
typedef transform< types,boost::add_pointer<_1>,
mpl::back_inserter< mpl::vector< > > >::type result_new;
BOOST_STATIC_ASSERT((std::is_same<result_new,pointers>::value)); //< fails...
讀了「文檔」我沒有幫助。 那麼,是否有可能通過mpl變換(或任何其他變換序列函數)獲得100%相同的類型?什麼是類型的結果
result
「現實中」,當它不是與指針?
我猜這是'boost :: mpl :: vector'而不是'std :: vector'?使用''''指令時要小心,否則可能會發生衝突,或者在最壞的情況下代碼難以遵循和維護。 – 2013-02-19 18:52:53
http://liveworkspace.org/code/3l8O9K$0 – 2013-02-19 19:26:04
@JoachimPileborg thx指出,它是關於'boost :: mpl :: vector'(代碼來自教程,我不想修改它) 。請注意,我在代碼的其餘部分使用別名'namespace mpl = boost :: mpl;'。 – eci 2013-02-20 08:28:00