|
Boost Users : |
Subject: [Boost-users] How to use mpl::for_each with mpl::map
From: Mark (mark.snelling_at_[hidden])
Date: 2009-04-23 05:23:33
Hi,
I'm trying to use the runtime mpl::for_each algorithm on an mpl::map
that I have which associates enumerated values to various types.
I want to be able to call a functor for each of the enumerated key
values in the mpl::map but can't get the syntax right, I get the
following compiler error with MSVC 9.0
c:\source\vendor\boost\1_38_0\boost\mpl\pair.hpp(43) : error C2039:
'first' : is not a member of 'boost::mpl::arg<1>'
Any help appreciated.
Mark.
#include <iostream>
#include <string>
#include <boost/mpl/map.hpp>
#include <boost/mpl/at.hpp>
#include <boost/mpl/for_each.hpp>
#include <boost/mpl/key_type.hpp>
namespace mpl = boost::mpl;
enum FieldId
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday,
_DaysInWeek
};
// Map of enumerated types
typedef mpl::map <
mpl::pair< mpl::int_< Monday >, mpl::identity< int > >,
mpl::pair< mpl::int_< Tuesday >, mpl::identity< std::string >
>,
mpl::pair< mpl::int_< Wednesday >, mpl::identity< int > >,
mpl::pair< mpl::int_< Thursday >, mpl::identity< __int64 > >,
mpl::pair< mpl::int_< Friday >, mpl::identity< char > >,
mpl::pair< mpl::int_< Saturday >, mpl::identity< bool > >,
mpl::pair< mpl::int_< Sunday >, mpl::identity< int > >
> _day_field_types;
// Returns the type for the associated enumeration
template< int FIELD_ID >
struct FieldTypeT : mpl::at< _day_field_types, mpl::int_< FIELD_ID >
>::type {};
// Prints value
struct printer
{
template< typename T >
void operator()( const T& x )
{
std::cout << x << std::endl;
}
};
int main()
{
// Print the associated type for the 'Tuesday' enumeration
std::cout << typeid( FieldTypeT< Tuesday >::type ).name() <<
std::endl;;
// Print the list of enumerations
mpl::for_each<
_day_field_types,
mpl::key_type<
mpl::map<>,
mpl::_1
>
>( printer() ); // Compiler error!
}
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net