C++ Multi type map like PHP stdClass

256 Views Asked by At

I'm using the libjson for parsing a JSON file in C++. I was wondering if you could do something like a PHP style notation for a map:

Just some pseudo code:

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"]
...

Is it possible to receive a result like this?

Maybe an enum for the current type in the BaseClass?

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

I tried to make it with a BaseClass and a template class, but I wasn't able to iterate through the object. Or should I even overload the operators for my BaseClass? Or is it necessary to inherit the BaseClass for each case (a class for the map-type object, a class for the int-type, for string and so on)?

I'm a a little bit desperate right now. Just need someone who leads me into the right direction :-P

PS: I don't want to use boost :-/

Thank you very much,

Daniel

2

There are 2 best solutions below

0
On

I appreciate that you don't want to use boost. However, this problem has been solved in boost.

You are essentially wanting a map of strings to variants.

Have a look at the source code for boost::variant and boost::any. Take particular note of how boost gets round the problem of recursive definitions, for example when you want to store a map inside an element of another map.

This will teach you more than you ever wanted to know on this subject :-)

1
On

There is an open source project for C++Builder programmer called JSonCBB library. This library provides a semantic like to your need: http://www.cbuilderblog.com/jsoncbuilderblog-class-library/