У меня есть структура из внешней библиотеки, для которой я написал несколько ненавязчивых методов сериализации. Также есть моя оболочка для этой структуры, и я пытаюсь сохранить все зависимости от внешней структуры для этой оболочки. Проблема в том, что все методы сериализации являются шаблонными, поэтому они определены в файлах заголовков и распространяют зависимость от внешней библиотеки на всех, кто сериализует оболочку, чего я пытаюсь избежать. Можно ли решить эту проблему?
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);