3

如何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,但是在当前的 boost(trunk, 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

我不明白这是怎么回事?

4

2 回答 2

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>
于 2009-06-24T09:09:57.913 回答
0

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

于 2009-11-19T02:51:41.650 回答