[serialization] macros and template classes

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<CLASS_NAME<TYPENAME_ARG_1, …, TYPENAME_ARG_n> > \ { \ 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<int, Class2<int, char> >; 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<int, Class2<int, char> > 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
participants (1)
-
alex solovyov