[英]Real time processing data using algorithms written in c++
這是場景:
我的Swift應用程式會從藍牙收集資料,並應進行即時處理。 這些數據主要來自IMU(陀螺儀,磁力計和加速度計)。
處理所有這些問題的算法將用c ++編寫,並利用一些庫,例如Eigen 。 我應該如何處理這樣的問題? 根據我的發現:
1)將c ++文件放入我的項目中,在Objective-c中編寫包裝器並將其橋接到Swift。 現在還要確定我是否可以輕松地將Eigen包含在移動應用中。 我想這將是一個乏味的過程
2)將所有算法獲取為庫( .dll
, .lib
,然后直接從swift調用它,不確定是否可行)
3)將所有算法重寫為Swift,使用Eigen替代Swift,不確定是否存在類似的東西。 而且,該解決方案效率較低,並且可能會由於期限問題而失敗。
我應該如何處理這樣的問題? 如何以最有效的方式解決它,在這里我可以利用已經存在的c ++代碼?
我相信你們中的某些人會將此問題視為基於觀點的觀點,但是我不知道如何以排除任何歧義的方式來陳述這個問題。
Swift是如何在iOS應用中運行使用Eigen的C ++文件的?
提前致謝
您不能從Swift調用c ++。 但是,您可以從Objective-C ++調用C ++。 您可以從Swift和Objective-c調用Objective-C ++。
只需確保面向公眾的@interface
代碼(在.h
文件中)僅包含Objective-C。 (沒有類,沒有模板,沒有名稱空間,不包括c ++頭)。
您的@implementation
放在擴展名為.mm
的文件中,該文件將作為Objective-C ++進行編譯-為您提供一個Objective-C接口,並在實現Objective-C對象時充分利用了C ++。
C ++對象作為目標C ++實現的成員變量生活得很愉快。 但是,它們將是默認構造的,然后objc運行時將調用Init
。 如果您使用的對象沒有默認構造函數,則需要將它們包裝在boost::optional
或std::unique_ptr
(等)中。
他們可以將Objective-C對象導入到Swift程序中。
完整的示例,適用於以前從未做過的任何人:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.