Каковы некоторые особенности/сюрпризы при использовании файлов .mm в Objective-C?

StackOverflow https://stackoverflow.com/questions/823285

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

Ваше здоровье!

Это было полезно?

Решение

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top