请参阅从升压下面的代码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