BOOST_FUSION_ADAPT_STRUCT を使って、構造体の内部構造体にアクセスする ― 2020年05月29日 12時29分33秒
マクロの為 BOOST_FUSION_ADAPT_STRUCT は namespace 内で使えない等の制約がある。しかし、マクロである為、二つめに書くフィールドアクセスは直下のメンバ変数名で無くても大丈夫か気になった。
早速実験。名前をプリントする実験を元に氏と名で構造体を分けてみた。今回はクラス名を若干分かりやすくする為に大文字に変更。
大きくないプログラムだが、結構長くなった。
#include <string>
#include <iostream>
#include <boost/fusion/algorithm.hpp>
#include <boost/fusion/include/adapt_struct.hpp>
struct Name
{
std::string first_;
std::string last_;
};
struct Person
{
Name name_;
int age_;
Person( const Name& name, int age )
: name_( name )
, age_( age )
{
}
};
BOOST_FUSION_ADAPT_STRUCT(
Person
, ( std::string, name_.first_ )
, ( std::string, name_.last_ )
, ( int, age_ )
)
struct Print
{
template< typename T >
void operator()( const T& t ) const
{
std::cout << t << std::endl;
}
};
int main()
{
Person p( { "Boost", "User" }, 10 );
boost::fusion::for_each( p, Print() );
}
コンパイルをすると、何のエラーも出なかったので期待は高い。無事に名字と名前の内部構造体にアクセスすることが出来た。
% c++ -I /usr/local/include boost_fusion_adapt_struct.cpp
% ./a.out
Boost
User
10
最近のコメント