LINUX.ORG.RU

Предложение по стандарту C++

 , ,


0

3

Решил сделать свою библиотеку для работы с json. Существующие не нравятся тем, что обладают ужасным синтаксисом, так как не используют многие возможности из C++11 (например, std::initializer_list) Как известно, в json допускаются два вида коллекций данных - просто списки и ассоциативные контейнеры. Во многих языках, эти виды контейнеров декларативно описываются разным синтаксисом. В C++11 полявилась удобная штука, позволяющая задавать любые коллекции как {a, b, c}, что неявно преобразуется в std::initializer_list. Но для инициализации ассоциативного контейнера, к примеру, std::map, используется он же, наприимер {{key1, val1}, {key2, val2}}. Соответсвенно, при конструировании json объекта мы не можем отличить пришедший в конструктор std::initializer_list, описывающий ассоциативный контейнер от списка списков. Есть просто решение: выдумать отдельный синтаксис, который по аналогии с std::initializer_list и {a,b,c} будет преобразовываться в std::pair, например такой

{key: value}
, что должно раскрываться в
std::make_pair(key, value)
. По идее все логично, обратную совместимость ни с чем не нарушает, радикально переделывать компиляторы не придется. Почему не добавить такое в стандарт?



Последнее исправление: CatsCantFly (всего исправлений: 2)
Ответ на: комментарий от MyTrooName

смешение кода с данными это и есть инкапсуляция, дибилушка. data-driven development обсуждай в любом другом треде

anonymous
()
Ответ на: комментарий от anonymous

смешение кода с данными это и есть инкапсуляция, дибилушка

ты данные от переменных не отличаешь?

MyTrooName ★★★★★
()
Ответ на: комментарий от CatsCantFly

Ну, так не строй JSON вручную - напиши обёртку (если в C++ её уже нету - я то с JSON тока в яве работал), которая объекты в JSON сериализирует, и все. Если объект - список, сериализуешь его, как JSON-массив, если это - строка/int/float, сериализуешь, как простое значение, если кастомный объект (или std::map) - берешь то, что в C++ вместо reflection, и сериализуешь, как словарь.

cherry-pick
()
Ответ на: комментарий от cherry-pick

Кстати, сейчас погуглил тут, и вспомнил, что в boost сериализация объектов реализована уже. Тебе в принципе только JSON в качестве бакенда туда добавить надо, и можешь прямо классы свои в JSON фигачить, как в яве почти.

cherry-pick
()
Ответ на: комментарий от cherry-pick

Еще в boost есть property_tree, который умеет json

anonymous
()
Ответ на: комментарий от CatsCantFly

Странный вопрос

Вполне закономерный.

И если ты в этом шаблоне поставишь что-то другое, выдаст ошибку.

Ошибку он получит при попытке инстанцирования кода. А какой тип нужен он не знает.

anonymous
()

Внимание!

Кнопка «Показать удаленные комментарии» находится внизу страницы.

Kuzy ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.