В настоящее время у меня есть объект, который реализует сложную систему для хранения и чтения объектов конфигурации нескольких типов, которые могут быть легко использованы локально:
template <typename T>
void rdData(std::string path, T& ref);
template <typename T>
void wrData(std::string path, T& ref);
int value;
rdData("tree1.scalar", value);
struct my_struct;
wrData("tree1", my_struct);
Тип T может быть примитивным типом данных, илиPOD C Struct, определенный в отдельном файле, скажем, legal_structs.c.Этот файл, определяющий структуры, со временем увеличивается по мере добавления новых структур.Если используется неправильный тип, генерируется исключение.
Однако теперь мы хотим использовать одну и ту же систему одновременно несколькими другими процессами.Это может быть сокеты, RPC или обмен сообщениями.
Есть ли способ определить тип объекта поверх сокетов, как это делают шаблоны?Например, клиенты будут делать:
remote_rdData(path, data);
И данные будут переданы в виде необработанных байтов на сервер, на котором работает наша система.На стороне сервера должен быть способ определить тип данных и вызвать локальную функцию шаблона с соответствующим типом.Пока что единственный способ, который я вижу, - это передать идентификатор объекта (например, его type_info), и на сервере есть огромный переключатель, сравнивающий type_infos и вызывающий для каждого объекта.Однако его необходимо добавлять каждый раз, когда в систему добавляется новая структура.
Существует ли более автоматический способ восстановления объектов на стороне сервера?