Hi all,
It is not possible to use the macro BOOST_CLASS_EXPORT_GUID or
BOOST_IS_ABSTRACT etc. with a template class. You can certainly
redefine the macro to use the template classes as follows:
#define BOOST_TEMPLATE_CLASS_IS_ABSTRACT(CLASS_NAME, TYPENAME_ARG_1 …,
TYPENAME_ARG_n) \
namespace boost \
{ \
namespace serialization \
{ \
template<> \
struct is_abstract > \
{ \
typedef mpl::bool_<true> type; \
BOOST_STATIC_CONSTANT(bool, value = true); \
}; \
} \
}
But here we have the following problem:
1. How many definitions are written?
2. What happens with the following template class: Class1 >; it defines another new macro (:
The answer for this problem I found in MPL library. We need a wrapper (traits):
struct abstract_class
{
typedef Class1 > type;
};
and the macro:
#define BOOST_TEMPLATE_CLASS_IS_ABSTRACT(CLASS_WRAPPER) \
namespace boost \
{ \
namespace serialization \
{ \
template<> \
struct is_abstract< CLASS_WRAPPER::type > \
{ \
typedef mpl::bool_<true> type; \
BOOST_STATIC_CONSTANT(bool, value = true); \
}; \
} \
}
It is not an optimal solution, but reduces the source code.
Best regards
Alex Solovyov