Что такое цель C ++? [закрыто]

165

Что такое Objective C ++ и могу ли я использовать этот язык в Xcode?

Саурабх
источник
Непосредственной причиной «трудно сказать, о чем спрашивают» была старая причина закрытия вопроса. В наши дни причина была бы «слишком широкой», поскольку ОП - это на самом деле два разных вопроса. Во-первых, для объяснения Objective C ++ потребовалось бы несколько страниц, а во-вторых, кодирование для iOS специально выполняется с использованием Objective C, а XCode является IDE по умолчанию для разработки под iOS, поэтому, даже несмотря на то, что они связаны, это слишком большой вопрос. Вопросы такого типа следует перенести на сайт документации.
Келли С. Френч
1
@ DaveVoyles-MSFT: Мне трудно воспринимать кого-то серьезно, кто думает, что опровержение вопроса и механизированное, промышленно организованное, систематическое массовое убийство более 6 миллионов человек - это одно и то же.
Йорг Миттаг
3
@ JörgWMittag Извините, но ваш ответ закрыт модераторами Stack Overflow как не реальный вопрос.
Дейв Войлес
1
@ DaveVoyles-MSFT: причина закрытого голосования "не реальный вопрос" была удалена много лет назад.
Йорг Миттаг

Ответы:

158

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

Кроме того, вы можете прочитать документацию Apple (печально удаленную, но заархивированную) на Objective-C ++ .

Doches
источник
2
раздел ограничения в этой ссылке говорит об этом, и стоит упомянуть, что Objective-C ++ не добавляет функции C ++ к классам Objective-C и не добавляет функции Objective-C к классам C ++. Например, вы не можете использовать синтаксис Objective C для вызова объекта C ++, вы не можете добавлять конструкторы или деструкторы в объект Objective C, и вы не можете использовать ключевые слова this и self взаимозаменяемо. Иерархии классов являются отдельными; класс C ++ не может наследовать от класса Objective-C, а класс Objective-C не может наследовать от класса C ++. Кроме того, многоязыковая обработка исключений не поддерживается
спрашивает
33

Objective-C ++ - это Objective-C (возможно, с Cocoa Framework) с возможностью связывания с кодом C ++ (вероятные классы).

Да, вы можете использовать этот язык в XCode для разработки для Mac OS X, iPhone / iPodTouch, iPad. Это работает очень хорошо.

Вам не нужно делать ничего странного в вашем проекте, чтобы использовать Objective-C ++. Просто назовите ваши файлы Objective-C с расширением .mm (вместо .m ), и все готово.

Это моя любимая архитектура: разрабатывать библиотеку базовых классов для моей игры / приложения на C ++, чтобы я мог использовать ее на других платформах (Windows, Linux) и использовать Cocoa только для интерфейса iPhone / iPad .

Пабло Санта Круз
источник
10
Речь идет не о связывании с C ++ - вы имели в виду смешивание ?
Георг Фрицше
6

Если вы хотите использовать Objective-C ++, но не хотите называть свои файлы, .mmоформите мой ответ на аналогичный вопрос .

Не изменяя .m на .mm или что-то в этом роде, если вы щелкнете по своему проекту, щелкните по tagets-> build settings, чтобы перейти к «LLVM GCC 4.2 - Languages» (новый xcode говорит «Apple LLVM compiler 4.2» ) увидим Compile Sources As, изменив это значение на Objective-C ++ ;

Джон Риселвато
источник
4
хотя вы можете сделать это, он не так переносим и может сбить с толку тех, кто пытается сохранить ваш код, где .s - заголовок, а .r - файлы реализации.
Grady Player
откуда вы тянете .s и .r? Вы можете использовать стандартный .m для файла метода и .h для заголовка так же, как если бы вы использовали обычный Objective-c.
Джон Риселвато
Я просто говорю, что .m что-то значит, а значит, что-то другое - это не стандарт.
Grady Player
В Objective-c для использования стандартного вектора (c ++ std) мне нужно было бы включить Objective-c ++. Для меня не имеет смысла создавать другое расширение типа файлов, просто чтобы использовать векторы внутри моего кода target-c.
Джон Риселвато
13
Абсолютно так и было бы: «cout» или что-то, что не является частью C.
Grady Player