2

抽象クラスとその具象クラスの実装があります。私がやりたいことは、iOS アプリケーション (Objective-C) 内の具象クラスを公開し、プロトコルを使用してイベントを ViewController にディスパッチすることです。

アイデアは、アドホック プロトコルに準拠する目的の C デリゲートをこの具体的なクラスに追加することです。それを達成する方法はありますか?

残念ながら、Objective-C++ は C++ クラスから継承できないと読みました。

前もって感謝します。

4

3 に答える 3

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
于 2016-04-07T11:09:09.423 に答える
0

idへの弱いポインターを宣言した場合は、抽象デリゲート(NSObjectのカテゴリー)を宣言してから、CPPソースでメソッドを自由に呼び出すことができます。抽象デリゲートを含むファイルをインポートし、ObjCクラスにメソッド自体を実装するだけで、実際のデリゲートを宣言せずにデリゲートを取得できます。

于 2012-11-30T04:06:06.000 に答える
0

has-a 関係を試してください。目的の C++ オブジェクトが C++ オブジェクトを持っているか、またはその逆です。次に、目的の C++ オブジェクトがメッセージを C++ オブジェクトに中継できるように、それらを相互に十分に認識させます。

于 2012-11-30T03:49:29.943 に答える