Можете ли вы использовать библиотеки C++ в проекте Cocoa (Obj-C)?

Я рассматриваю возможность изучения Objective-C и Cocoa, в основном для того, чтобы использовать инструменты и графические интерфейсы Apple.

Однако я также хотел бы заняться программированием графики; OpenFrameworks и Cinder — две библиотеки, которые бросаются в глаза, но мы находимся в стране C++.

Я работаю с Java/Swing/Processing... мало что знаю о семействе C. Насколько эффективно вы можете вызывать библиотеки C и C++, такие как Cinder и OF, из родного Cocoa?

И бонусные баллы: будет ли подобное решение работать на iPhone или iPad?


person aljabear    schedule 01.07.2011    source источник


Ответы (3)


Короче говоря, C++ отлично подходит для программ OS X и iOS и довольно хорошо работает с Objective-C.

Подробнее:

Однако я также хотел бы заняться программированием графики; OpenFrameworks и Cinder — две библиотеки, которые бросаются в глаза, но мы находимся в стране C++.

Я не буду говорить об этих библиотеках напрямую.

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

Я работаю с Java/Swing/Processing... мало что знаю о семействе C. Насколько эффективно вы можете вызывать библиотеки C и C++, такие как Cinder и OF, из родного Cocoa?

Objective-C++ позволяет использовать C, C++ и Objective-C в одном переводе. Не стесняйтесь использовать/комбинировать C++, C или ObjC, где это необходимо. Время компиляции увеличится, и есть некоторые ограничения*, если вы выберете этот путь. В остальном поддержка очень хорошая. Даже Apple использует большое количество C++ в своих приложениях/библиотеках.

И бонусные баллы: будет ли подобное решение работать на iPhone или iPad?

Определенно. Поддержка c++11 для iOS и OS X в настоящее время немного отстает. Тем не менее, команда clang очень быстро добавила его поддержку. Скорее всего, будут некоторые проблемы, если вам нужны новейшие функции, поэтому я бы посоветовал воздержаться от новейших функций C++ и компилятора, если ваш проект зависит от этого. Конечно, не помешает попробовать вашу программу с использованием новейших функций clang в каждом выпуске, чтобы определить, насколько хорошо она работает с вашими программами.

Обновление: на данный момент (8 ноября 2011 г.) clang может обрабатывать почти весь код C++ 2003, который я ему добавляю. Скорость и размер кода различаются по сравнению с GCC+LLVM. Я бы не хотел отказываться ни от того, ни от другого на данный момент, но оба компилятора хорошо работают для меня с C++ 2003, а Apple GCC не будет поддерживать C++11, поэтому самое время начать тестирование clang, если вам нужны функции C++11. в ближайшем будущем.

  • C++ идеально подходит (IMO) для общей разработки критически важной производительности на iOS, если ваша команда знает, как его использовать.
  • Смешивание C, ObjC и C++ очень эффективно, если вы используете правильные функции каждого языка по правильным причинам, и существует хорошая совместимость. Это восходит к OS X несколько лет назад (хотя в то время компилятором был GCC).

*ограничения: это разумные ограничения - все функции, которые вам нужны, существуют, но есть некоторые вещи, которые люди могут ожидать, но которые невозможны. наиболее распространенным, вероятно, является невозможность получения типов различных объектных моделей. то есть вы не можете разумно не создавать тип C++ из типа objc, но вы можете свободно объявлять ivars нескольких типов в любом типе объекта.

person justin    schedule 01.07.2011

В приложениях iOS можно использовать как OpenFrameworks, так и Cinder (см. соответствующий вопрос SO: Творческая разработка OpenGL ES, OpenFrameworks, Cinder и IOS), хотя Apple "предпочитает" разработчиков использовать OpenGL.

person PengOne    schedule 01.07.2011

На данный момент вы можете использовать Cinder из типичного проекта Cocoa с помощью новой оболочки CocoaCinderGL. Он позволяет добавить в ваше приложение несколько NSCustomView, каждый из которых запускает независимый «экземпляр» Cinder. И, очевидно, вы можете подключить столько NSButtons, NSSliders, сколько захотите, к этим экземплярам. Надеюсь, это поможет!

person matsav    schedule 01.09.2011