2012-05-13 2 views
0

Мне было интересно, есть ли в библиотеках C++ NSData, NSDictionary и NSArray, а если нет, есть ли известные популярные фреймворки, которые предоставляют эти классы?NSData, NSDictionary, NSArray Equivalents C++

С уважением

ответ

1

STL есть карты, которые можно использовать вместо NSDictionary и векторов, которые могут быть использованы вместо NSArray, но, конечно, " преобразование "не является безболезненным, поскольку конкретные функции могут отсутствовать и нуждаться в некотором более кодировании. Например. для «эмулирования» селектора dictionaryWithContentsOfURL: для NSDictionary вам потребуется дополнительное кодирование на C++, чтобы проанализировать URL-адрес, и - если это удаленный ресурс - для его подключения и получения, а затем для несериализации данных; другие библиотеки могут, конечно, помочь (boost?), но дело в том, что если вам нужно перенести некоторые специальные функции NSDictionary (и других), вам нужно написать больше кода.

С другой стороны, если вы используете только базовый словарь и функцию массива, то «преобразование» может стать довольно тривиальным.

Аналогичный аргумент для NSData, который может быть «эмулирован» на std::stringbuf.

Вы также можете использовать библиотеки GNUstep; GNUstep - это открытая инфраструктура Cocoa GNU, которая обеспечивает почти все, что у вас есть на Cocoa (классы AppKit и Foundation); GNUstep существует для других платформ, чем Apple Mac OS X, поэтому вы можете переносить приложения Cocoa на эти платформы. Используя Objective-C++, вы можете использовать как структуру STL, так и Cocoa/GNUstep, а также использовать лучший из двух миров (с ограничениями на программирование OO и «взаимодействия» между классами/объектами различного «происхождения»), теоретически (я никогда не попробовал такую ​​смесь, но paying attention возможно иметь некоторые преимущества, может быть)

3

Не совсем, так как возможности этих классов определяются в значительной степени языком.

С другой стороны, существует std :: vector (массив и данные) и std :: map (dictionary). Это совсем не эквивалентно, но они служат схожим целям.

4

Смотрите эти:

NSArray: Vector

NSDictionary: Map

+0

да, но в Векторный объект будет скопирован. как сохранить только ссылку? – SAKrisT

+0

Я нашел shared_ptr и weak_ptr очень полезные вещи :) – SAKrisT