Что такое цель 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 ++ .


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.