3

我曾在 C++ 中工作过,但那是几年前,在过去 5 年左右的时间里,我几乎只在 Objective C 中工作过,也许我只是觉得这样做很舒服。

但是,我正在编写一个 C++ json-parser,它在概念上很困难,因为没有像 Objective C 中那样的自然映射。我并不是说它更好,只是说我还没有找到自然映射.

因此,在 Objective CI 中,通常会开始将 json 解析为 NSDictionary,因为它映射得非常好。NSDictionary 是键值对数据类型,其中键通常是字符串(但可以是任何类型),值通常是 NSObject(从概念上讲),并且在 Objc 中,所有内容都继承 NSObject,因此类型是一种“自动多态” “如果你愿意的话。(为任何可能确切知道如何帮助我但如果我不解释 Objc 则不明白我要求什么的 C++ 开发人员提供的解释)。

无论如何,这意味着如果我有一个示例 json-string:

{"key":1, "key2":3.14, "key3":"hello world", "key4":[1,2,3]}

它已经精确映射到一个 NSDictionary,其中第一个值是整数(或数字),第二个是浮点数(或数字),第三个是 NSString,第四个是 NSArray,它保存三个值,在我的示例中恰好是整数,但可以只要它是从 NSObject 派生的,就可以是任何东西。

在 C++ 中,这对我来说更难理解和找到一个好的映射或模型,我想我可以滚动我自己的多态类型来做同样的事情,然后我可以有一个抽象类型的映射并得到几乎相同行为。

但要么我认为我需要编写自己的容器(地图和矢量)或编写自己的“Json 类型”。然而,我有点害怕陷入 Objc 中正确的思维方式,因为它是一种非常不同的语言,并且建立在与 C++ 完全不同的设计理念之上。

也许有更好和更正确的方法在 C++ 中做这样的事情,我只是不知道。所以我的问题是如何在 C++ 中以一种好的方式处理可能具有不同类型的事物。

4

1 回答 1

1

首先声明一下,当我在这里谈论 Objective C 时,我确实包含了很多 Cocoa,我认为大多数读者会无缝地将其读入其中,但为了清楚,当我谈论 Cocoa 特定的东西时称它为 Objective C 只是我真的习惯于将 Cocoa 与 Objective C 一起使用(即 OSX 开发)。

好吧,我有一些意见,我可能会在这里采用的解决方案是擅长Boost. 因此,这意味着我将我的json dictionariesasstd::map <std::string, boost::any>和我的数组/向量解析为 as std::vector <boost::any>,这会将硬输入放松到更适合 json 等数据描述格式的级别。

感谢所有在这里评论和帮助的人!

很棒的是,即使这是针对我的 json-parser 的,它也确实给了我更多的视角,所以我觉得我也遇到过类似的问题,因为我在使用不那么强类型的语言进行编码时被宠坏了,并且有更多开放(或封闭,我猜取决于你如何看待它)对象架构。希望其他人也会发现这个问题也很有用!

于 2012-12-28T13:45:32.553 回答