Я занимаюсь разработкой простого сериализатора данных в XML для учебных целей. Теперь, когда у меня есть базовый класс сериализатора, я хочу получить специализированный сериализатор для структур данных различных проектов. Мой базовый сериализатор имеет такие функции:
class Serializer {
public:
template <class T> void add_value(const std::string &key, T *value);
template <class T> void add_value(const std::string &key, std::vector<T*> *value);
};
Базовый сериализатор способен обрабатывать большинство примитивных структур данных (int, double, bool и т. Д.), И есть некоторые перегрузки для нескольких более сложных структур (векторов, карт и т. Д.). Предположим, у меня теперь есть проект со следующей структурой данных:
struct MyStruct {
int width, height;
};
Теперь я хотел бы получить сериализатор из моего базового сериализатора, который способен обрабатывать эту структуру, а также структуры, которые он уже знает:
class MyStructSerializer : public Serializer {
void add_value(const std::string &key, MyStruct *value);
};
Проблема: после перегрузки функции add_value
в дочернем классе формы родительского класса больше не доступны. Можно ли перегрузить функцию add_value
как специализацию для функций, предоставляемых в родительском классе, то есть не дать дочернему классу забыть более общий метод его родителя после перегрузки?