2013-09-05 82 views
1

是否可以使用NSDictionary裏面的C++ class?我知道,我可以用內部C++http://philjordan.eu/article/mixing-objective-c-c++-and-objective-c++的Objective-C類,但對於NSDictionary,我需要頭......但如果我這樣做#import,它無法編譯。NSDictionary - C++中的Objective-C代碼

PS:我知道,我不應該混的Objective-C(++)C++,但我寫的OpenGL多平臺應用程序和EAGL初始化輸入parametrs之一是NSDictionary。我可以初始化OpenGL在Objective-C,但它會打破我的OOP設計。

+1

你把你的文件編譯爲Objective-C++嗎?確保最快的方法是使用文件擴展名.mm。 #import應該沒有問題,那麼錯誤是什麼? – Tommy

+0

我正在編譯它爲* .cpp,我從objcruntime –

回答

2

當然,將C++類編譯爲Objective-C++(.mm擴展名),你就沒有問題了。我這樣做的唯一問題是你不能在C++頭文件中定義Objective-C++類型。所以不是我用一個void *,並投它爲void *使用

pVoidDict = (__bridge_retained void*)[NSDictionary dictionary]; 

您需要執行橋接投地使用它:

unsigned int dictCount = [(__bridge NSDictionary*)pVoidDict count]; 

唯一的問題是你必須記住釋放它在最後。您可以按如下鑄造回這樣做是爲了一個NSDictionary:

NSDictionary* dict = (__bridge_transfer NSDictionary*)pVoidDict; 

這將它返回到電弧控制並在析構函數退出,將被添加到自動釋放池按照標準ARC規則。

它並不是特別好看,但我在跨平臺的庫中使用了這一點,所以我可以用C++類包裝Objective-C對象。

+0

越來越erros是否有可能以其他方式使用它?在* .cpp文件中有Objective-C++? –

+0

nope它不可能 – Goz

+0

@MartinPerry:雖然我說它不可能它可以設置XCode作爲Objective-C++編譯文件,但你仍然編譯爲ObjC++ ... – Goz