BOOST_FUSION_DEFINE_STRUCT 内で fusion::vector を使用する
BOOST_FUSION_DEFINE_STRUCT 内で下記のように fusion::vector を使いたい場合があるとします。
BOOST_FUSION_DEFINE_STRUCT( BOOST_PP_EMPTY(), person, (std::string, name) (fusion::vector<int, int>, pos) )
しかし、これでは "fusion::vector
これは Boost 1.50.0 から追加された BOOST_IDENTITY_TYPE を使用して回避することが出来ます。
[ソース]
#include <boost/fusion/include/define_struct.hpp> #include <boost/fusion/include/vector.hpp> #include <boost/fusion/include/io.hpp> #include <boost/utility/identity_type.hpp> #include <iostream> #include <string> namespace fusion = boost::fusion; BOOST_FUSION_DEFINE_STRUCT( BOOST_PP_EMPTY(), person, (std::string, name) (BOOST_IDENTITY_TYPE((fusion::vector<int, int>)), pos) ) int main(){ person mami; mami.name = "mami"; mami.pos = fusion::vector<int, int>(1, 2); std::cout << fusion::as_vector(mami) << std::endl; return 0; }
[出力]
(mami (1 2))
[boost]
- ver 1.51.0
[参照]
http://flast.hateblo.jp/entry/2012/07/04/151104
http://www.boost.org/doc/libs/release/libs/utility/identity_type/doc/html/index.html
[余談]
この記事自体、結構前に書き溜めしていたんですが、最近 BoostML で同じような質問が投稿されていたのを見かけたので返信してみましたヾ ゚∋゚)ノシ
英語むずい。