#include <boost/serialization/version.hpp> namespace My{ template<class T> class MyClass { ..... }; } // namespace My namespace boost{ namespace serialization{ template<class T> struct version<My::MyClass<T> > { BOOST_STATIC_CONSTANT(unsigned int, value = 2); // versionを2に指定する }; }} // namespace boost::serialization
クラステンプレートだとBOOST_CLASS_VERSIONマクロが使えないことに対する回避策.
一見するとboost::serializationに侵入した危険なコードに見えますが,boost::serialization::versionのようなクラスは型特性(type traits)クラスとして提供されているもので,このようなユーザ定義クラスに対して侵入的に特殊化することは極めて妥当な使い方(というかこういう使い方のために存在するのが型特性クラス)です.std名前空間内のクラステンプレート,関数テンプレートについても基本的にこういう侵入的な特殊化が許されています.(参考:http://d.hatena.ne.jp/Cryolite/01000227)