Hello,
I'm trying out some ideas with boost.fusion maps.
Here is a small example:
namespace fields
{
struct general
{
struct first_name ;
struct last_name ;
struct age ;
} ;
struct address
{
struct street ;
struct postal_code ;
struct country ;
} ;
}
typedef fusion::map <
fusion::pair< fields::general::first_name, std::string >,
fusion::pair< fields::general::last_name, std::string >,
fusion::pair< fields::general::age, int >
> general_person ;
typedef fusion::map <
fusion::pair< fields::address::street, std::string >,
fusion::pair< fields::address::postal_code, std::string >,
fusion::pair< fields::address::country, std::string >
> address_person ;
typedef fusion::map <
fusion::pair< fields::general, general_person >,
fusion::pair< fields::address, address_person >
> person ;
int
main()
{
using namespace fields ;
general_person gp =
fusion::make_map< general::first_name,
general::last_name, general::age >( "John", "Doe", 99 ) ;
address_person ap =
fusion::make_map< address::street,
address::postal_code, address::country >( "Foo street 1", "12345", "Barland" ) ;
person a_person =
fusion::make_map< general, address >( gp, ap ) ;
std::cout << "Age: "
<< fusion::at_key< general::age >( fusion::at_key< general >( a_person ) )
<< std::endl ;
return 0 ;
}
I'm not happy with the last line that retrieve the value of a specific pair inside a nested map.
I was wondering whether this could benefit from some MPL trick to make it more readable. I was thinking about something like the following: get_value< general, age >( a_person ).
My questions are:
1) Is MPL the right tool to transform a call to
get_value< general, age >( a_person )
into
fusion::at_key< general::age >( fusion::at_key< general >( a_person ) )
2) If it is, could someone provide me some help on how to achieve such a result?
Thank you for your help