Boost / Property Tree определяет тип значения

Я хотел бы использовать Boost / Property Tree как своего рода синхронизацию с моим приложением.
Для этого я планировал использовать Zeroc / ICE для синхронизации состояний (используя шаблон наблюдения и двунаправленные соединения).

Однако, чтобы сделать это эффективным способом, мне нужно как-то указать ввод / вывод приложения. (Очевидно).

Это хорошо работает для импорта значений в дерево (поскольку я могу использовать InputStream для преобразования в любой примитивный тип и ловить возникающие ошибки) но это мешает, когда я хочу экспортировать значения.

С функциями, представленными в документации, я не вижу способа получить фактический тип элемента

boost::property_tree::ptree Tree;

// Import
Ice::CommunicatorPtr communicator = current.adapter->getCommunicator();
Ice::InputStreamPtr in = Ice::createInputStream(communicator, item.data);

switch (item.type) {
case BOOLVAL:
double boolval;
in->read(boolval);
Tree.put(item.path, boolval);
break;
}

// Export
// This is not possible since I cannot retrieve or compare the type
Ice::CommunicatorPtr communicator = current.adapter->getCommunicator();
Ice::OutputStreamPtr out = Ice::createOutputStream(communicator);
auto data = Tree.get<TYPE>(path);
out->write(data);

1

Решение

Концепция дерева свойств обеспечивает иерархическое хранение данных (пар ключ-значение), где значение текст.

Вот и все.

Если ваше приложение назначает имея в виду к содержанию этого текста, метаданные должны быть в вашей программе. Есть нет Вариант хранения листьев в библиотеке.

Это также верно, даже если основной формат сериализации (например, JSON) делает поддержите это, поскольку документация ясно разъясняет, например:

  • Значения JSON отображаются на узлы, содержащие значение. Однако вся информация о типах теряется; числа, а также литералы «null», «true» и «false» просто отображаются в их строковую форму.

Что теперь?

Похоже, вы хотите иметь фреймворк в стиле отражения, а Boost Property Tree его не предоставляет. Я бы предложил другие библиотеки, но все они либо предполагают навязчивые изменения, либо все же требуют, чтобы вы моделировали метаданные для данных программы вручную.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]