2013-11-29 6 views
0

Использование библиотек, таких как jsoncpp, для сериализации моих объектов и данных C++ (например, для их построения на Python), я действительно устал от всех циклов в моем коде, чтобы преобразовать std::vector<double> s в Json::Value. В итоге я снова и снова переписываю те же строки. Поэтому я хотел бы сделать это немного легче.Преобразование типов в свободные функции

У меня есть два варианта использования: Преобразование STL типов (по крайней мере std::vector, std::map) от и до Json::Value, и сделать это с моими собственными типами данных, а также.

решения для собственных типов данных:

  • определить конструктор ожидает const Json::Value&, конструктор затем пытается заполнить объект с данными или выдает исключения, если переданное значение не соответствует конкретным требованиям
  • определяют operator Json::Value() как член функции моего класса.

Таким образом, я должен быть в состоянии писать такие вещи, как, что:

MyObj o; 
Json::Value root; 
root["foo"] = o; 
MyObj reconstructed(root["foo"]); 

Но как я должен делать это с STL типов? Напишите явные функции, возможно, шаблоны, или я должен делать то же, что и для своих собственных типов данных, за исключением того, что вместо функций-членов я использую бесплатные функции? Какова наилучшая практика?

ответ

1

Вы можете написать одну функцию для этого, используя for_each.

Если вы хотите поддерживать вложенные контейнеры (вектор в векторе и т. Д.), То вам нужны функции-оболочки и вызывать функцию рекурсивно, пока тип ввода не позволит прямое преобразование в значение Json :: Value.

+0

Извините за недоразумение, я отредактировал мой вопрос: Мне надоело повторять один и тот же фрагмент кода снова и снова, поэтому желательно иметь неявное преобразование для меня. Я знаю, как преобразовать вектор в Json :: Value в маленький код, но не знаю, где *, чтобы поместить соответствующий код. –

+0

Eh ... Просто поместите его в функцию и поместите в служебный файл, который включает Jsoncpp. Если у меня есть такие файлы утилиты, которые зависят от библиотеки, я обычно вызываю пару файлов: nameofthelib_util .h/cpp или NameofthelibUtil.h/cpp. – Domi

+0

Мой вопрос: Являются ли функции явными, например «vec_to_json», или они неявные, как мой пример «operator» выше ... более «лучшая практика», чем «Я не знаю, как это работает вообще». –

 Смежные вопросы

  • Нет связанных вопросов^_^