2012-11-30 42 views
2

我有一個抽象類,他的具體類實現。 我想要做的是在iOS應用程序(Objective-C)中公開具體類,並使用協議將事件分派給ViewController。允許一個C++抽象類使用Objective-C的委託

的想法是添加一個目標C代表,符合自組織協議,此具體類。 任何想法如何實現它?

不幸的是,我讀了的Objective-C++不能從C++類繼承。

預先感謝您。

+1

客觀的C++類不能從C++的類繼承,但它可以包含一個 –

+0

@RichardHodges這正是問題。你能把它寫成答案嗎? –

+0

完成。很高興它有幫助。 –

回答

0

嘗試具有-的關係。目標C++對象有一個C++對象,反之亦然。然後讓他們知道對方足以讓客觀的C++對象將消息轉發給C++對象。

+0

對不起,如果我遲到了,但我真的很忙。 你能解釋得更清楚嗎?我不明白。 – Gabriele

0

如果你宣佈一個弱指針ID,你可以聲明一個抽象的代表(在NSObject的一類),然後調用自由在CPP源的方法。只需導入包含抽象委託的文件,然後在ObjC類中實現這些方法本身,並且在不聲明實際委託的情況下獲得一個委託。

+0

這似乎是一個好方法。我會試試看。 在這一刻我解決了創建一個非常類似於NSNotificationCenter的自定義類。主要區別在於此類能夠使用void *變量而不是id對象處理對象:(void *)字段。 通過這種方式,我可以觀察到由具體的C++類植入提交的特定通知。 具體類向事件通知中心提交事件 目標c對象現在可以觀察由任何類型的對象(void *)提交的通知。 您對這個策略有何看法? – Gabriele

1

客觀的C++類不能從一個C++類繼承,但它可以包含一個

@interface DelegateObject : NSObject 
{ 
} 
- (id) init; 
- (void) do_something: (NSObject*) thing; 
@end 

struct cpp_thing 
{ 
    // this could be a template if you wished, or you could take a copy 
    // or whatever you want 
    void do_something(NSObject* thing) { }; 
}; 

@implementation DelegateObject 
{ 
    std::shared_ptr<cpp_thing> _cpp; 
} 

- (id) init 
{ 
    if (self = [super init]) 
    { 
     _cpp = std::make_shared<cpp_thing>(); 
    } 
    return self; 
} 

- (void) do_something: (NSObject*) thing 
{ 
    _cpp->do_something(thing); 
} 

@end 
+0

您還可以告訴我們如何在Objective-C和C++之間實現委託功能嗎? –

+0

@AdnanZahid完成 –