我有一個抽象類,他的具體類實現。 我想要做的是在iOS應用程序(Objective-C)中公開具體類,並使用協議將事件分派給ViewController。允許一個C++抽象類使用Objective-C的委託
的想法是添加一個目標C代表,符合自組織協議,此具體類。 任何想法如何實現它?
不幸的是,我讀了的Objective-C++不能從C++類繼承。
預先感謝您。
我有一個抽象類,他的具體類實現。 我想要做的是在iOS應用程序(Objective-C)中公開具體類,並使用協議將事件分派給ViewController。允許一個C++抽象類使用Objective-C的委託
的想法是添加一個目標C代表,符合自組織協議,此具體類。 任何想法如何實現它?
不幸的是,我讀了的Objective-C++不能從C++類繼承。
預先感謝您。
嘗試具有-的關係。目標C++對象有一個C++對象,反之亦然。然後讓他們知道對方足以讓客觀的C++對象將消息轉發給C++對象。
對不起,如果我遲到了,但我真的很忙。 你能解釋得更清楚嗎?我不明白。 – Gabriele
如果你宣佈一個弱指針ID,你可以聲明一個抽象的代表(在NSObject的一類),然後調用自由在CPP源的方法。只需導入包含抽象委託的文件,然後在ObjC類中實現這些方法本身,並且在不聲明實際委託的情況下獲得一個委託。
這似乎是一個好方法。我會試試看。 在這一刻我解決了創建一個非常類似於NSNotificationCenter的自定義類。主要區別在於此類能夠使用void *變量而不是id對象處理對象:(void *)字段。 通過這種方式,我可以觀察到由具體的C++類植入提交的特定通知。 具體類向事件通知中心提交事件 目標c對象現在可以觀察由任何類型的對象(void *)提交的通知。 您對這個策略有何看法? – Gabriele
客觀的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
您還可以告訴我們如何在Objective-C和C++之間實現委託功能嗎? –
@AdnanZahid完成 –
客觀的C++類不能從C++的類繼承,但它可以包含一個 –
@RichardHodges這正是問題。你能把它寫成答案嗎? –
完成。很高興它有幫助。 –