вектор — карта C ++ для нескольких типов, такая как PHP stdClass

Я использую libjson для анализа файла JSON в C ++. Мне было интересно, если вы могли бы сделать что-то вроде записи в стиле PHP для карты:

Просто псевдокод:

mapObj["id"] = 4;
mapObj["tags"] = vector {"Foo", "Bar"};

structMapObj = {
{"name", "FooBar"},
{"size", 1234567},
{"date", "2014-12-24"}
};
mapObj["file"] = anotherMapObject;// for the vector
mapObj["tags"][0];
mapObj["tags"][1];
mapObj["tags"].size();
mapObj["tags"].pushBack("Foo");

// for the map
mapObj["file"]["name"]
...

Можно ли получить такой результат?

Может быть, enum для текущего типа в BaseClass?

myObj["key"].getType; // returns a 1 for example an INT

Я пытался сделать это с помощью BaseClass и класса шаблона, но я не смог перебрать объект. Или я должен даже перегружать операторы для моего BaseClass? Или необходимо наследовать BaseClass для каждого случая (класс для объекта типа карты, класс для типа int, для строки и т. Д.)?

Я немного отчаялся прямо сейчас. Просто нужен кто-то, кто ведет меня в правильном направлении 😛

PS: я не хочу использовать boost: — /

Большое спасибо,

Даниил

0

Решение

Я ценю, что вы не хотите использовать повышение. Однако эта проблема в бусте была решена.

Вы по существу хотите карту строк к вариантам.

Взгляните на исходный код для boost :: option и boost :: any. Обратите особое внимание на то, как boost решает проблему рекурсивных определений, например, когда вы хотите сохранить карту внутри элемента другой карты.

Это научит вас больше, чем вы когда-либо хотели знать на эту тему 🙂

1

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

Существует проект с открытым исходным кодом для программиста C ++ Builder, который называется библиотека JSonCBB. Эта библиотека обеспечивает семантическое подобие вашей потребности: http://www.cbuilderblog.com/jsoncbuilderblog-class-library/

0

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