我有一個來自外部庫的結構,爲此我編寫了一些非侵入式序列化方法。還有我的包裝這個結構,我試圖保持從外部結構的所有依賴關係到這個包裝。問題是,所有的序列化方法都是模板,所以它們在頭文件中定義並從外部庫傳播到每個序列化包裝器的包裝器,我試圖避免。有沒有可能解決這個問題?boost :: serialization:是否可以避免模板函數?
UPD:起初,我有這樣的事情:
// serialization.h
#include <external_library.h>
template <typename Archive>
void serialize(Archive& archive, ExternalStruct& external_struct, const unsigned int version) {
// ...
}
然後我試圖讓序列化功能的非模板爲特定類型的檔案:
// serialization.h
#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>
struct ExternalStruct;
void serialize(boost::archive::binary_iarchive& archive, ExternalStruct& external_struct, const unsigned int version);
void serialize(boost::archive::binary_oarchive& archive, ExternalStruct& external_struct, const unsigned int version);
// serialization.cpp
#include <external_library.h>
#include "serialization.h"
void serialize(boost::archive::binary_iarchive& archive, ExternalStruct& external_struct, const unsigned int version) {
// ...
}
void serialize(boost::archive::binary_oarchive& archive, ExternalStruct& external_struct, const unsigned int version) {
// ...
}
但後來我得到很多編譯錯誤: no type named 'type' in 'struct boost::mpl::greater<boost::serialization::tracking_level<ExternalStruct>, mpl_::int_<0> >' BOOST_STATIC_WARNING(typex::value);
這正是我終於做到的:) – lizarisk