C++;多类型映射类PHP stdClass 我使用Lbjson解析C++中的JSON文件。我想知道您是否可以为地图使用PHP风格的符号:

C++;多类型映射类PHP stdClass 我使用Lbjson解析C++中的JSON文件。我想知道您是否可以为地图使用PHP风格的符号:,c++,vector,types,map,libjson,C++,Vector,Types,Map,Libjson,只是一些伪代码: 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"]

只是一些伪代码:

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"]
...
有可能收到这样的结果吗

可能是基类中当前类型的枚举

myObj["key"].getType; // returns a 1 for example an INT
我尝试使用基类和模板类来实现它,但无法遍历对象。或者我应该为我的基类重载操作符吗?或者是否有必要为每种情况继承基类(映射类型对象的类、int类型的类、字符串等)

我现在有点绝望。只需要有人带领我走向正确的方向

PS:我不想使用boost:-/

多谢各位


丹尼尔

我很感激你不想使用boost。然而,这个问题已经在boost中得到了解决

实际上,您需要一个字符串到变体的映射

请看一下boost::variant和boost::any的源代码。请特别注意boost是如何绕过递归定义的问题的,例如,当您希望将一个映射存储在另一个映射的元素中时


这将教给你比你想知道的更多关于这个主题:-)

有一个面向C++Builder程序员的开源项目叫做JSonCBB库。这个库提供了一个符合您需要的语义:

'PS:我不想使用boost:-/'真遗憾……如果我理解得很好,您想要一个带有字符串键和任意值类型(
int
std::vector
等)的映射?@πάνταῥεῖ 首先我想了解事情是如何发展的work@DanielQuast通过编写自己的代码来实现与boost::variant相同的行为将是一条漫长而艰难的道路。祝你好运@402是的,我想解析我的文件,而不是简单地浏览我的地图:mapObj[“key”][“InceptionMap”][“key”]…我将看看boost。非常感谢。谢谢你的回答!我试图避免外部LIB,但每个人都推荐boost,所以试一试