Вам необходимо использовать 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 ++.