从mpl :: vector生成fusion :: vector

时间:2009-06-24 07:40:49

标签: c++ templates metaprogramming boost-fusion

如何从fusion::vector生成mpl::vector? 如何从mpl::vector生成fusion::vector

BOOST_MPL_ASSERT((is_same<
                  fusion::vector<int, char>,
                  generate_fusion_vector<mpl::vector<int, char> >::type >));

BOOST_MPL_ASSERT((is_same<
                  mpl::vector<int, char>,
                  generate_mpl_vector<fusion::vector<int, char> >::type >));

我需要generate_fusion_vectorgenerate_mpl_vector元函数。 我可以编写自己的元函数,但我怀疑它们已经存在。

之前我有过使用fusion::map生成result_of::as_map的经验,但在当前的提升(主干,也是1.39)中也会出现这样的错误:

D:\Libraries\boost_trunk\boost/fusion/sequence/intrinsic/size.hpp(56) : error C2903: 'apply' : symbol is neither a class template nor a function template
        D:\Libraries\boost_trunk\boost/fusion/container/vector/convert.hpp(23) : see reference to class template instantiation 'boost::fusion::result_of::size' being compiled
        with
        [
            Sequence=boost::mpl::vector
        ]
        temp.cpp(71) : see reference to class template instantiation 'boost::fusion::result_of::as_vector' being compiled

我不明白发生了什么事?

2 个答案:

答案 0 :(得分:7)

由于fusion接受mpl类型作为函数的参数,你可以试试这个:

BOOST_MPL_ASSERT((is_same<
fusion::vector<int, char>,
fusion::result_of::as_vector<mpl::vector<int, char> >::type >));

编辑:

我认为这对您不起作用的原因是您必须包含某些头文件才能在融合中实现mpl兼容性。

#include <boost/fusion/adapted/mpl.hpp>
#include <boost/fusion/include/mpl.hpp>

答案 1 :(得分:0)

我不知道你是否还在做char,int但是我遇到了同样的错误,我的问题是我试图制作一个长度为11的向量,但是FUSION_MAX_VECTOR_SIZE是10。