цель c — алгоритм C ++ в приложении iOS

У меня есть звук DSP aglo в C #, который я хотел бы включить в iOS. Друг предложил мне перейти на C ++ вместо Objective-C, так как это не зависит от платформы. Это хорошая практика, любые подводные камни, о которых нужно знать? Мой инстинкт состоит в том, чтобы сохранить его родным с Obj-C. Как бы я получил доступ к функциям C ++ в iOS?

Спасибо

1

Решение

Вы можете свободно смешивать 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 я объявляю простой класс с одной статической функцией, чтобы облегчить это. Очевидно, что есть много возможностей для более сложной разработки, но этого должно быть достаточно, чтобы вы поняли идею.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]