Возможно, что-то в этом роде:
#define BOOST_CLASS_TEMPLATE_EXPORT_IMPLEMENT(T) \
namespace boost { \
namespace archive { \
namespace detail { \
namespace { \
template<typename U> \
struct init_guid< T<U> > { \
static guid_initializer< T<U> > const & g; \
}; \
template<typename U> \
guid_initializer< T<U> > const & init_guid< T<U> >::g = \
::boost::serialization::singleton< \
guid_initializer< T<U> > \
>::get_mutable_instance().export_guid(); \
}}}} \
/**/
#define BOOST_CLASS_TEMPLATE_EXPORT_KEY2(T, K) \
namespace boost { \
namespace serialization { \
template<typename U> \
struct guid_defined< T<U> > : boost::mpl::true_ {}; \
template<typename U> \
inline const char * guid< T<U> >(){ \
return K + "<" + guid<U>() + ">"; //this doesn't work, I know! \
} \
} /* serialization */ \
} /* boost */ \
/**/
#define BOOST_CLASS_TEMPLATE_EXPORT_KEY(T) \
BOOST_CLASS_TEMPLATE_EXPORT_KEY2(T, BOOST_PP_STRINGIZE(T)) \
/**/
#define BOOST_CLASS_TEMPLATE_EXPORT_GUID(T, K) \
BOOST_CLASS_TEMPLATE_EXPORT_KEY2(T, K) \
BOOST_CLASS_TEMPLATE_EXPORT_IMPLEMENT(T) \
/**/
Это может работать с некоторыми дополнительными настройками.Конечно, это, вероятно, предполагает, что user_type также уже экспортирован.Но, тем не менее, это уменьшило бы комбинаторное измерение, все, что вам нужно, это один экспорт на класс и один экспорт на шаблон класса, а не один экспорт на экземпляр шаблона (количество классов X количество шаблонов классов).
Этовероятно, тот вопрос, который следует спросить / попросить / предложить парню, отвечающему за библиотеку Boost.Serialization (думаю, это будет Роберт Рэйми).