|
Boost Users : |
From: Robert Dailey (rcdailey_at_[hidden])
Date: 2008-05-01 19:40:01
Hey guys,
I was wondering if there was some sort of MPL Switch concept in the boost
library. Before I go any further on that topic, let me first explain what
I'm trying to do.
I'm currently using a library that has several functions as follows:
void SetParamFloat( char* name, float value );
void SetParamInt( char* name, int value );
void SetParamString( char* name, char* value );
I'm creating a sort of facade around this library, and as a result I have a
function that looks as follows:
template< typename t_type >
void SetParam( char* name, t_type value );
What I need to do is map real types to function pointers, obviously. But I
want all of this to be done at compile time, since I have all of the
information to do so. My first thought on a solution to this problem was
boost::mpl::map, but then I thought to myself: How do I pass function
pointers as template arguments? And on top of that, since all of the
functions I'd be mapping to types all have different types anyway, creating
a functor object for function pointers seems difficult as you would have to
do a lot of messy template class specializations. We'd have to wrap the
function pointers in functors of some sort because boost::mpl::map requires
typed template arguments, instead of non-type template arguments.
This is what brings me to a sort of switch concept. If there was such a
concept in the boost library, it might be more likely to hide the boiler
plate code required simply to get to the point to where I can start adding
items to a boost::mpl::map. I realize there is no boost::switch concept (at
least that google shows), but I was wondering if there was something like
it. As a pseudo code example, I would want the logic of my new function to
work as follows:
template< typename t_type >
void SetParam( char* name, t_type value )
{
switch( t_type )
{
case float:
{
SetParamFloat( name, value );
break;
}
case int:
{
SetParamInt( name, value );
break;
}
case char*:
{
SetParamString( name, value );
break;
}
}
}
Any help is greatly appreciated. I guess what I really need is some guidance
on the matter. I strive for a generic way to implement this, but I don't
want it to look messy, as most template code has the bad habit of turning
out that way.
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