So far, this is all I've been able to come up with: #include <boost/mpl/map.hpp> #include <boost/mpl/at.hpp> namespace detail { template< unsigned int t_value > struct integral { static const unsigned int value = t_value; }; typedef boost::mpl::map< boost::mpl::pair<float, integral<GL_FLOAT>
, boost::mpl::pair<double, integral<GL_DOUBLE>
> glTypeMap; }; template< typename t_type > struct Vertex { static const unsigned int type = boost::mpl::at<detail::glTypeMap, t_type>::type::value; t_type x, y, z; }; On Nov 16, 2007 5:48 PM, Robert Dailey <rcdailey@gmail.com> wrote:
Hi,
I'm looking for a complete compile-time constant map container that uses types as keys and integral constants as values. For example:
typedef map< pair<float, 90>, pair<unsigned int, 3> > mapType; unsigned int value = get_value<mapType, float>::value;
The above code is PSEUDO CODE only. It is supposed to give you an idea of what I'm looking for. I tried using boost::fusion::map, however the fusion::pair object expects a TYPE as the second template argument, so I can't specify integral values. Could someone provide a code example that achieves the above? Note that I should be able to do the following as well:
typedef map< pair<float, 90>, pair<unsigned int, 3> > mapType;
class foo { // This would result in 'value' being the integral number 90. static const unsigned int value = get_value<mapType, float>::value; }