У меня есть абстрактный базовый класс Serializable, где я хотел бы реализовать метод Serialize для всех унаследованных от него классов. Пример кода ниже:
struct Serializable
{
std::string Serialize() {
std::stringstream ss;
msgpack::pack(&ss, *this);
return ss.str();
}
};
struct DataType : public Serializable
{
int value;
MSGPACK_DEFINE(value);
}
std::string str = DataType{10}.Serialize();
Но код не компилируется. Я предполагаю, что в методе Serializable :: Serialize () библиотека Msgpack не могла понять MSGPACK_DEFINE, определенный в структуре DataType.
Я предполагаю, что создание метода Serialize stati c и generi c решит проблему. Но есть ли способ сериализации объекта в базовом классе? Как бы вы это реализовали?
Обновление : я вижу, что полиморфизм stati c решает проблему ..
template<typename Derived>
struct Serializable
{
std::string Serialize() {
std::stringstream ss;
msgpack::pack(&ss, *static_cast<Derived*>(this));
return ss.str();
}
};