У меня есть звук DSP aglo в C #, который я хотел бы включить в iOS. Друг предложил мне перейти на C ++ вместо Objective-C, так как это не зависит от платформы. Это хорошая практика, любые подводные камни, о которых нужно знать? Мой инстинкт состоит в том, чтобы сохранить его родным с Obj-C. Как бы я получил доступ к функциям C ++ в iOS?
Спасибо
Вы можете свободно смешивать C ++ с Objective-C, он известен как «Objective-C ++». Чтобы сообщить компилятору о своих намерениях, вам нужно переименовать вас .m
подать как .mm
,
Подобное микширование кода не обязательно является хорошей идеей и довольно бессмысленным, если вы стремитесь к переносимости. Лучше держать C ++ отдельно .cpp
файлы, и создайте класс-оболочку «голыми руками» (obj-c ++) для передачи данных между вашими объектами C и C ++ (фактически, оболочка опосредует методы obj-C и функции C ++ для отправки и возврата данных).
Недавно я опубликовал несколько простых примеров обработки изображений на github — openCVSquares а также openCVStitch. Стоит взглянуть, просто чтобы увидеть, как код C ++ отделен от obj-C.
Библиотеки openCV имеют интерфейс C ++, поэтому использование C ++ в проекте неизбежно. Это было бы есть возможность объединить весь код в файлы .mm, но это простой способ создать беспорядок.
Что касается переносимости, вы получаете это, отделяя код пользовательского интерфейса от кода манипулирования данными. В любом случае, вы должны делать это для MVC, так что для написания вашей модели на C ++, согласно этим примерам, будет немного больше работы. модель портативный, UI это — и должно быть — зависит от платформы.
Будь то вы Это должно зависеть от других факторов, таких как ваше свободное владение каждым языком, выбор фреймворков и библиотек, а также вероятность портирования. Хотя обработка звука была бы естественным кандидатом для такого подхода.
Некоторая деталь о образцах
Не беспокойтесь, если вы не можете заставить код работать (фреймворк openCV может быть хлопотным …), главное — увидеть, как код соединен воедино. Я постарался сделать примеры очень простыми.
Код C ++ был перенесен из примеров C ++, включенных в дистрибутив openCV: squares.cpp а также stitching.cpp. Я попытался изменить их как можно меньше, чтобы оценить эту идею переносимости.
Грубо говоря, мне пришлось решать два вопроса …
1 / удалил любой код пользовательского интерфейса (поэтому мы просто отправляем данные обратно на сторону obj-C).
2 / измените функцию main (), чтобы она стала вызываемой функцией со стороны obj-C. В заголовочном файле .cpp я объявляю простой класс с одной статической функцией, чтобы облегчить это. Очевидно, что есть много возможностей для более сложной разработки, но этого должно быть достаточно, чтобы вы поняли идею.
Других решений пока нет …