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.