Каковы некоторые причуды / сюрпризы с использованием файлов .mm в Objective-C? - PullRequest
5 голосов
/ 05 мая 2009

Я хочу использовать некоторые коллекции C ++ STL в своем приложении Objective-C для iPhone. По-видимому, это возможно, предоставив файлам расширение «.mm». Каковы некоторые из причуд / сюрпризов, связанных с этим?

Я хочу использовать знакомые мне базовые контейнеры (вектор, очередь, набор, ...)

Ура! * * 1005

Ответы [ 4 ]

7 голосов
/ 05 мая 2009

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

5 голосов
/ 06 мая 2009

Основная особенность Objective-C ++ заключается в том, что если вы не передадите -fobjc-call-cxx-cdtors в g ++, он не вызовет конструктор и деструктор переменных экземпляра C ++ в объектах ObjC. Поэтому не забудьте включить эту опцию, и вы должны быть хорошими.

2 голосов
/ 05 мая 2009

Файлы будут скомпилированы с помощью компилятора Objective-C ++, поэтому все будет вести себя больше как g ++, чем gcc, но так как это то, что вам нужно, это, вероятно, не будет сюрпризом. Со стороны Objective-C я не знаю каких-либо проблем, и я работал над несколькими крупными проектами, которые в значительной степени использовали Objective-C ++. Просто имейте в виду, что зарезервированные слова Objective-C также зарезервированы в Objective-C ++, так что вы можете время от времени сталкиваться с проблемами со сторонними библиотеками C ++ (например, если они используют «id» в качестве параметра в открытом интерфейсе).

1 голос
/ 05 мая 2009

Вы будете удивлены, насколько хорошо это работает. На самом деле я не сталкивался с проблемами смешивания Obj-C и C ++ в файле .mm.

...