4

テンプレート化されたコンテナ クラスで boost.serialization を使用したい:

// MyContainer.h

template<class T> struct MyContainer {
    T t;

    template<class Archive>
    void serialize(Archive& archive, const unsigned version) {
        archive & t;
    }
};

STL コンテナーをテンプレート パラメーターとして使用する場合、たとえば

// Main.cpp
...
MyContainer<array<int,4>> mc;
std::ofstream ofs("foo.bar");
boost::archive::binary_oarchive oa(ofs);
oa << mc;
...

...Visual Studio 11 で次のエラー メッセージが表示されます。

'serialize' : is not a member of 'std::array<_Ty,_Size>'

両方のファイルに「boost/serialization/array.hpp」を含めようとしましたが、問題は解決しませんでした。その上、コンテナーは他の STL コンテナーも保持する可能性があるため、配列の特殊化を含めることは私が望んでいるものではありません。

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

4

1 に答える 1

5

serialiation /array.hppには のserialize()オーバーロードがありますが、 のオーバーロードはboost::arrayありませんstd::array

代わりに次serialize()を使用して、独自のオーバーロードを提供できるはずです。make_array()

namespace boost {
namespace serialization {

template<class Archive, class T, size_t N>
void serialize(Archive & ar, std::array<T,N> & a, const unsigned int version)
{
  ar & boost::serialization::make_array(a.data(), a.size());
}

} // namespace serialization
} // namespace boost
于 2012-07-21T03:41:36.860 に答える