在OC工程中使用C++類


   有時我們需要在OC的程序中使用已有的C++類,這時,我們可以把OC類的.m文件后綴改為.mm,就可以在里面使用C++類了。但是二者直接混用會出現一些問題以致編譯無法通過,這時可以簡單的通過把target中的compile source as改為oc++就可以通過編譯。這是一個簡單的做法,但兩個世界確實很不一樣,如此這樣的深度混合有時會變地很棘手。

  但是如果使用默認compile類型就在引入C++類后很可能會出錯,

錯誤通常是這樣的:
Unknown type name 'class'; did you mean 'Class'?
因為class CppObject根本不是有效的Objective-C語法, 所以編譯器就被搞糊塗了。正是因為Objective-C中沒有class這個關鍵字. 所以要與Objective-C兼容,Objective-C++類的頭文件必須僅包含Objective-C代碼,絕對沒有C++的代碼 - 這主要是影響類型定義。網上的文章已經提到一些解決方案.其中最好的一個是PIMPL,它也適用於現在的情況。這里還有一個適用於clang的新方法,可以將C++代碼從Objective-C中隔開,這就是class extensions中ivars的。
PIMPL:網上可以找到相關文章,簡單來說,就是把#import "CPPObject.h"改成@class CPPObject,就OK了。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM