【问题标题】:generate fusion::vector from mpl::vector从 mpl::vector 生成 fusion::vector
【发布时间】:2009-06-24 07:40:48
【问题描述】:

如何从mpl::vector生成fusion::vector? 如何从fusion::vector生成mpl::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 元函数。 我可以编写自己的元函数,但我怀疑它们已经存在。

我之前有过在result_of::as_map 的帮助下生成fusion::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

我不明白发生了什么?

【问题讨论】:

  • 是否需要计算与mpl::vector相同类型的fusion::vector的类型(mpl::vectors只有类型,没有值),还是你的意思是mpl: :vector_c?

标签: c++ templates metaprogramming boost-fusion


【解决方案1】:

由于 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>

【讨论】:

  • 我之前在 result_of::as_map 的帮助下生成了 fusion::map,但在当前的 boost(trunk, 1.39 也是) 中会出现这样的错误:
     D:\Libraries\boost_trunk\boost/fusion/ sequence/intrinsic/size.hpp(56) : error C2903: 'apply' : symbol 既不是类模板也不是函数模板 D:\Libraries\boost_trunk\boost/fusion/container/vector/convert.hpp(23) :请参阅使用 [ Sequence=boost::mpl::vector ] 
    编译的类模板实例化 'boost::fusion::result_of::size' 我不明白什么正在进行吗?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多