Какая часть C ++ поддерживается в Objective-C ++ - PullRequest
6 голосов
/ 12 апреля 2009

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

Ответы [ 6 ]

13 голосов
/ 02 октября 2009

Можно ли использовать такие вещи, как шаблоны, в Objective-C ++.

Да, но вам нужно позаботиться о том, чтобы смешивать типы и интерфейсы между чистыми уровнями C ++ и кодом Objective-C ++. Помните о границах между слоями, где вам нужно будет преобразовать такие типы, как std::string в NSString и т. Д.

Например, вы можете реализовать ядро ​​игрового движка на чистом C ++ и просто реализовать свои контроллеры и код GUI на Objective-C ++. Тогда код Obj-C ++ является связующим звеном между чистым движком C ++ и Cocoa.

Полагаю, на самом деле вопрос в том, могу ли я использовать повышение?

Учитывая, что iPhone OS является подмножеством OS X, которое все еще обеспечивает полный уровень POSIX, большинство библиотек Boost должно работать нормально. Это должно быть похоже на написание кода Дарвина.

В Objective-C ++ есть ряд ограничений, о которых следует знать (взято непосредственно из Справочного руководства Objective-C 2.0 ):

  • вы не можете использовать синтаксис Objective C для вызова объекта C ++
  • вы не можете добавлять конструкторы или деструкторы к объекту Objective-C
  • Вы не можете использовать ключевые слова this и self взаимозаменяемо
  • иерархии классов являются отдельными; класс C ++ не может наследовать от класса Objective-C, а класс Objective-C не может наследовать от класса C ++
  • исключение, сгенерированное в коде Objective C, не может быть перехвачено в коде C ++, и, наоборот, исключение, сгенерированное в коде C ++, не может быть перехвачено в коде Objective C.
10 голосов
/ 12 апреля 2009

Весь C ++ поддерживается в Objective C ++. Может быть возможно использовать boost, но вам, возможно, придется портировать некоторые вещи, зависящие от платформы.

4 голосов
/ 20 апреля 2009

Следует отметить, что вы не можете просто делать все, что вы можете делать в C ++ в Objective-C ++. Например, вы не можете вызывать виртуальные функции на объектах C ++ из класса Objective-C. Как только вы вызываете функцию C / C ++, вы можете делать все, что захотите.

3 голосов
/ 13 апреля 2009

Objective C ++ является надмножеством C ++. Все, что вы можете сделать в C / C ++, может быть сделано в Obj-C ++. Часть «Objective» содержит, помимо прочего, систему обмена сообщениями Smalltalk-esque и другие дополнения к C ++.

2 голосов
/ 01 октября 2009

Объекты C ++ в Objective C НЕ обязательно будут действовать как в C ++. Например, конструкторы и деструкторы не вызываются автоматически и (я думаю), что вы не можете реализовать виртуальные методы ...

1 голос
/ 17 октября 2009

Повышение полезно, но это также большие накладные расходы для добавления в проект.

Убедитесь, что это действительно нужно, прежде чем добавлять его.

Для поддержки Regex: RegexLite .

Для всего остального: Какао .

...