$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
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.