2010-05-25 51 views
4

我正在使用iphone SDK,並且主要在C++中編寫代碼,同時在obj-c中使用SDK的某些部分。在需要obj-c類的情況下是否可以指定一個C++類?例如:
具有Objective C類的Mingling C++類

1)將代表設置爲obj-c對象時。

  • 我不能讓一個C++類從一個委託協議派生所以這和其他可能的原因阻止我做我的C++類的各種對象 - 對象的委託。我所做的解決方案是創建一個obj-c適配器類,該類包含一個到C++類的ptr,並用作委託(在調用時通知C++類)。每次我需要將委託通知發送到C++類時,編寫這些代碼感覺很麻煩。

2)時設置選擇

  • 這齊頭並進與第1項說,我想設置一個回調火什麼時間完成,就像按下按鈕或setAnimationDidStopSelector中的UIView動畫功能。能夠指定一個C++函數以及相關的setAnimationDelegate委託會很好。

好吧,我懷疑這是不是容易實現,但如果任何人有如何做到這一點的任何建議,如果是這樣,或者對如何更容易地寫出這樣的東西,我很願意聽到他們的聲音。謝謝。

回答

1

可悲的消息是,你無法完全掌握適配器,但是你可以緩解這項工作。通過使用Objective-C運行時庫,您可以通過使用聲明式方法爲您生成適配器,從而減少混亂。

Objective-C運行時允許您在運行時構造類,您可以爲其設置方法的實現函數。通過使用模板,您可以通過生成調用所需的C++方法的蹦牀函數,從面向類型的聲明中生成一個Objective-C類。

started a prototype一會兒回來,並提到的狀態可能就足夠你的情況。有可能做得更好,並且也可以乾淨地支持屬性和分佈式對象,但我還沒有找到實現更好版本的時間。