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 に正確にマップされており、最初の値は 2 番目の整数 (または数値)、2 番目の浮動小数点数 (または数値) であり、3 番目は NSString であり、4 番目は NSArray であり、私の例ではたまたま整数である 3 つの値を保持しますが、 NSObject から派生したものである限り、何でもかまいません。

C ++では、これを理解して適切なマッピングまたはモデルを見つけるのははるかに困難です。同じことを行うために独自のポリモーフィック型をロールすることができると思います。その後、抽象型のマップを作成して、ほぼ同じ結果を得ることができます行動。

しかし、独自のコンテナー (マップとベクター) を作成するか、独自の「Json タイプ」を作成する必要があると考えています。しかし、Objc は C++ とはまったく異なる言語であり、まったく異なる設計思想に基づいて構築されているため、Objc の正しい考え方に固執しすぎるのは少し心配です。

私が知らないC++でこのようなことを行うためのより良い、より正しい方法があるかもしれません。したがって、私の質問は、C++ で異なる型を持つ可能性があるものを適切に処理する方法です。

4

1 に答える 1

1

まず第一に免責事項です。ここで Objective C について話すときは、実際に多くの Cocoa を含めます。ほとんどの読者はこれをシームレスに読み込んでくれると思います。私は、Objective C (つまり OSX 開発) と一緒に Cocoa を使用することに本当に慣れています。

さて、私はいくつかの情報を得ており、おそらくここで行っている解決策は、Boost. したがって、これはjson dictionariesasstd::map <std::string, boost::any>と配列/ベクトルを asとして解析することを意味しstd::vector <boost::any>、これによりハードタイピングが緩和され、json などのデータ記述形式により適したレベルになります。

ここにコメントして助けてくれたすべての人に感謝します!

素晴らしいことは、これが私の json-parser のためのものであったとしても、実際により多くの視点を与えてくれたことです。オープン (または、見方によってはクローズド) オブジェクト アーキテクチャです。他の人もこの質問が役立つことを願っています!

于 2012-12-28T13:45:32.553 に答える