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以前にhelpで生成した経験があり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 に答える