mpl :: vectorからfusion :: vectorを生成します
-
10-07-2019 - |
質問
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_vector
および generate_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
何が起こっているのかわかりませんか?
解決
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>
他のヒント
まだchar、intを実行しているかどうかはわかりませんが、同じエラーに遭遇しました。問題は、長さ11のベクトルを作成しようとしましたが、FUSION_MAX_VECTOR_SIZEは10でした。
所属していません StackOverflow