抽象クラスとその具象クラスの実装があります。私がやりたいことは、iOS アプリケーション (Objective-C) 内の具象クラスを公開し、プロトコルを使用してイベントを ViewController にディスパッチすることです。
アイデアは、アドホック プロトコルに準拠する目的の C デリゲートをこの具体的なクラスに追加することです。それを達成する方法はありますか?
残念ながら、Objective-C++ は C++ クラスから継承できないと読みました。
前もって感謝します。
抽象クラスとその具象クラスの実装があります。私がやりたいことは、iOS アプリケーション (Objective-C) 内の具象クラスを公開し、プロトコルを使用してイベントを ViewController にディスパッチすることです。
アイデアは、アドホック プロトコルに準拠する目的の C デリゲートをこの具体的なクラスに追加することです。それを達成する方法はありますか?
残念ながら、Objective-C++ は C++ クラスから継承できないと読みました。
前もって感謝します。
目的の 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
idへの弱いポインターを宣言した場合は、抽象デリゲート(NSObjectのカテゴリー)を宣言してから、CPPソースでメソッドを自由に呼び出すことができます。抽象デリゲートを含むファイルをインポートし、ObjCクラスにメソッド自体を実装するだけで、実際のデリゲートを宣言せずにデリゲートを取得できます。
has-a 関係を試してください。目的の C++ オブジェクトが C++ オブジェクトを持っているか、またはその逆です。次に、目的の C++ オブジェクトがメッセージを C++ オブジェクトに中継できるように、それらを相互に十分に認識させます。