От Objective C до C ++ набирает головную боль

Я работал на C ++, но это было несколько лет назад, последние 5 или около того лет, которые я почти только работал в Objective C, и, возможно, мне просто стало удобно это делать.

Однако я пишу json-parser на C ++, и это концептуально сложно, поскольку нет естественного отображения, как в Objective C. Я не говорю, что это лучше, так или иначе, просто заявив, что я не нашел естественного отображения ,

Поэтому в Objective C я обычно начинаю разбирать json как NSDictionary, так как он действительно хорошо отображается. NSDictionary - это тип данных пары ключ-значение, где ключ обычно является строкой (но может быть любым типом), а значение обычно представляет собой NSObject (концептуально), а в Objc все наследует NSObject, поэтому типы являются своего рода «автополиморфными» " если вы будете. (объяснение для любого разработчика на C ++, который может точно знать, как мне помочь, но не понимаю, о чем я прошу, если я не объясню Objc).

В любом случае это означает, что если у меня есть пример json-string:

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

```

он уже точно сопоставляется с NSDictionary, где первым значением будет целое число (или число), второе - float (или число), третье - NSString, а 4th - NSArray, которые содержат три значения, которые в моем примере являются целыми числами, но могут быть вообще чем угодно, если он получен из NSObject.

В C ++ для меня гораздо сложнее понять и найти хорошее сопоставление или модель, я думаю, я мог бы свернуть свои собственные полиморфные типы, чтобы сделать то же самое, тогда у меня может быть карта с абстрактным типом и получить почти то же самое поведение.

Но я думаю, что мне нужно будет написать свои собственные контейнеры (карты и векторы) или написать собственные «Json-типы». Однако я немного боюсь быть слишком застрявшим на пути мышления, которое справедливо в Objc, так как это совсем другой язык и построен на совершенно разных дизайнерских идеях, а затем на C ++.

Возможно, есть лучшие и правильные способы делать такие вещи на C ++, которые я просто не знаю. Поэтому мои вопросы - это то, как обрабатывать вещи, которые могут иметь разные типы в хорошем смысле на C ++.

Прежде всего, отказ от ответственности, когда я говорю об Objective C, здесь я действительно включаю в себя много Cocoa, я думаю, что большинство читателей будет легко читать это в нем, но просто чтобы быть ясным, когда я говорю о специфических вещах Cocoa, называющих это Objective C, это просто что я действительно привык использовать Cocoa вместе с Objective C (то есть OSX).

Well I've got some input and the solution I am probably going with here is to adept to `Boost`. So this would mean that I parse my `json dictionaries` as `std::map`  and my arrays/vectors as `std::vector`  and this will loosen up the hard typing to a level which is more fitting for a data description format such as json.

Спасибо всем, кто комментирует и помогает здесь!

Самое замечательное в том, что даже если это для моего json-parser, это действительно дало мне больше перспективы, поэтому я чувствую, что есть аналогичные проблемы, которые я испытывал, будучи испорченными в кодировании на языках, которые менее строго типизированы, и имеют больше открытый (или закрытый, я думаю, в зависимости от того, как вы его видите) архитектура объекта. Надеюсь, что другие найдут этот вопрос полезным!