Использование библиотек, таких как 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
типов? Напишите явные функции, возможно, шаблоны, или я должен делать то же, что и для своих собственных типов данных, за исключением того, что вместо функций-членов я использую бесплатные функции? Какова наилучшая практика?
Извините за недоразумение, я отредактировал мой вопрос: Мне надоело повторять один и тот же фрагмент кода снова и снова, поэтому желательно иметь неявное преобразование для меня. Я знаю, как преобразовать вектор в Json :: Value в маленький код, но не знаю, где *, чтобы поместить соответствующий код. –
Eh ... Просто поместите его в функцию и поместите в служебный файл, который включает Jsoncpp. Если у меня есть такие файлы утилиты, которые зависят от библиотеки, я обычно вызываю пару файлов: nameofthelib_util .h/cpp или NameofthelibUtil.h/cpp. – Domi
Мой вопрос: Являются ли функции явными, например «vec_to_json», или они неявные, как мой пример «operator» выше ... более «лучшая практика», чем «Я не знаю, как это работает вообще». –