Смешивание C ++ и Objective C - PullRequest
5 голосов
/ 28 марта 2012

Где я могу найти конкретный документ или документацию по использованию и использованию C ++ с Objective-C?

Кажется, Apple удалила этот документ со своего веб-сайта, и я все озадачен сопоставлением битов информациииз блогов и вопросов, размещенных здесь.

Любой может рассказать о том же.

Когда мы используем файл .mm, при смешивании синтаксиса или при использовании объекта в файле .m, который принадлежит классу C ++?

При передачеобъекты между функциями, принадлежащими двум разным языкам, например, передача объекта target-c в функцию в файле cpp. Нужно ли собирать его в void * или можно использовать (ObjectiveC inteface) *?

Ответы [ 2 ]

6 голосов
/ 28 марта 2012

Вам необходимо использовать Objective-C ++ всякий раз, когда вы либо #include / #import пишете, либо непосредственно пишете код Objective-C и C ++ в одном файле.Это обычно очевидно с явным кодом;#include часто меньше, и вы должны позаботиться о том, чтобы не «просочиться» один из языков в слишком большую часть другого.Ваш пример #import использования заголовочного файла C ++ очевиден: вы можете сделать это только с Objective-C ++.Обратите внимание, что если ваш Cplusplus был struct типом, вы могли бы объявить его как таковой вместо #import заголовка C ++.

Если вы сделаете это в заголовке, он "отравит""заголовок работать только в этом режиме.Вам нужно будет активно этого избегать, иначе весь ваш проект скоро будет содержать только файлы .mm. Я описал некоторые приемы в этой статье и ранее, в этой более ранней статье .Для более новых версий Objective-C вы также можете добавить ivars к классам в расширениях категорий.Это означает, что вы можете определить типизированные C ++ ivars в своем файле .mm, , а не заголовок, что позволяет .m файлам #import it.

Для вашего второго вопроса (Пожалуйста, задавайте только один вопрос за один раз ): тип id определен в заголовочном файле objc.h в терминах C и, следовательно, будет работать как в Objective-C, так и в C ++.Аналогично, API-интерфейс Objective-C предоставляется с точки зрения функций C, которые также будут работать с C ++.Если вы действительно хотите отправлять сообщения и обращаться к свойствам объектов Objective-C с помощью канонического синтаксиса из кода C ++, вам нужно переключить этот файл на Objective-C ++.

3 голосов
/ 28 марта 2012

Используйте файлы .mm, если у вас есть синтаксис c ++ в вашем коде или когда включены файлы, которые содержат код c ++.

Смешивание C ++ с target-c может немного сбивать с толку, но если подумать над указателем, то это не имеет большого значения.Обрабатывайте методы экземпляра объекта C ++ так же, как в C ++, и то же самое относится к объектам c.

...