3
我想使用boost.serialization與模板化容器類:當我使用STL容器作爲模板參數,例如與STL容器作爲模板使用boost.serialization參數
// MyContainer.h
template<class T> struct MyContainer {
T t;
template<class Archive>
void serialize(Archive& archive, const unsigned version) {
archive & t;
}
};
// 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>'
我曾嘗試包括在這兩個文件 「助推/系列化/ array.hpp」,但這並沒有解決這個問題。此外,包括數組專業化不是我想要的,因爲容器也可以容納任何其他STL容器。
這樣做的正確方法是什麼?
謝謝!這解決了編譯錯誤。但是,如果模板參數是例如一張地圖,還需要另一個專業化。有沒有一種通用的方式來做到這一點? – untraceable 2012-07-21 04:24:57
@untraceable:'map','set','vector'等已經被支持 - 包括'serialization/map.hpp'等。 – 2012-07-21 04:31:26
所以基本上,如果我想用不同類型的MyContainer,返回MyContainer.h幷包含適當的boost.serialization頭文件?!在我看來,這種方式違背了泛型編程的目的:-) – untraceable 2012-07-21 04:50:17