10

シリアライズするテンプレート クラス (C と呼びます) があり、ブースト シリアライゼーションのバージョンを指定したいと考えています。BOOST_CLASS_VERSION はテンプレート クラスでは機能しないためです。私はこれを試しました:

namespace boost {
namespace serialization {
    template< typename T, typename U >
    struct version< C<T,U> >
    {
        typedef mpl::int_<1> type;
        typedef mpl::integral_c_tag tag;
        BOOST_STATIC_CONSTANT(unsigned int, value = version::type::value);
    };
}
}

しかし、コンパイルされません。VC8 では、BOOST_CLASS_VERSION への後続の呼び出しで次のエラーが発生します。

error C2913: explicit specialization; 'boost::serialization::version' is not a specialization of a class template

それを行う正しい方法は何ですか?

4

3 に答える 3

13
#include <boost/serialization/version.hpp>

:-)

于 2008-09-17T14:06:44.533 に答える
1

名前空間内にカプセル化するまで、マクロ BOOST_CLASS_VERSION を適切に使用できました。返されたコンパイル エラーは次のとおりです。

error C2988: unrecognizable template declaration/definition
error C2143: syntax error: missing ';' before '<'
error C2913: explicit specialization; 'Romer::RDS::Settings::boost::serialization::version' is not a specialization of a class template
error C2059: syntax error: '<'
error C2143: syntax error: missing ';' before '{'
error C2447: '{': missing function header (old-style formal list?)

以前の編集で提案されたように、BOOST_CLASS_VERSION をグローバル スコープに移動することで問題が解決しました。マクロを参照構造の近くに保つことをお勧めします。

于 2016-06-06T14:33:47.803 に答える