Boost logo

Boost :

From: Rozental, Gennadiy (gennadiy.rozental_at_[hidden])
Date: 2003-01-27 14:06:18


> Would there be a way to use the MPL so that I could avoid
> #define'ed macros for creating these functions?

You don't need MPL to do so.
==========================================================
>
>
> #define MAKE_CHECK_TYPE_FUNCTION(the_type, the_string)\
> bool check_type(const string& str, const the_type& value)\
> {\
> if(str != the_string)\
> {\
> cout << " Wrong type=[" << str << "] T=" <<
> typeid(value).name() << endl;\
> return false;\
> }\
> return true;\
> }
>
> MAKE_CHECK_TYPE_FUNCTION(bool, "b")
> MAKE_CHECK_TYPE_FUNCTION(double, "f")
> MAKE_CHECK_TYPE_FUNCTION(int, "i")
> MAKE_CHECK_TYPE_FUNCTION(string, "s")
>
> ==========================================================

template<typename T>
check_type_func_traits;

template<>
check_type_func_traits<bool> { static std::string type_id = "b" }; //
depends on compiler may require extrnal definition also
template<>
check_type_func_traits<double> { static std::string type_id = "f" };
....

template<typename T>
bool check_type(std::string const& str, const T const& value)
{
  if( str != check_type_func_traits<T>::type_id )
  {
    cout << " Wrong type=[" << str << "] T="
           << typeid(value).name() << endl;
    return false;
  }

  return true;
}

Regards,

You may use some different kind of compile time mapping. But this should
work for you.

Gennadiy.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk