1

objc 側で cpp オブジェクトのすべてのプロパティとメソッドを実装する必要なく、Objective-C ラッパーを使用して C++ オブジェクトをプロキシすることは可能ですか? 私が探しているのは、すべてのオブジェクトで機能すると確信している、より一般的なものです。

MyObjCWrapper *obj = [[MyObjCWrapper alloc] initWithCppObj: myCppObj];

[MyObjCWrapper aCppObjMethod ]; //calling a method not explicitly defined in the ObjCWarapper

継承は無理でしょう。C++ クラスからの継承は不可能です。

リフレクションを使用する方法もありますが、必ずしも最速とは限りません。ほかに何か?委任?一般的な原則は知っていますが、あまり詳しくありません。

最良のアプローチは、JavaScript のような「プロトタイプ」メカニズムを持つことです。このように、Objective-C のプロトタイプに C++ インスタンスを簡単にアタッチできますが、それは機能しますか? [] 演算子のオーバーロードと、プロトタイプに適切な「自己」コンテキストを提供することに問題があると思います。

それで、なにかお手伝いできますか?

4

1 に答える 1

0

いいえ、それは不可能です。

つまり、Objective-C は非常に動的ですが、C++ はより静的な言語です。定義されていない Objective-C メソッドを呼び出すことも、実行時にその呼び出しをインターセプトして処理することもできます (通常、呼び出しを別の場所に転送するプロキシ オブジェクトに対して行われます)。 「文字列」(技術的には文字列ではありませんが、同様です)をメソッドの名前に置き換えます。マッピングを行うためのリストが既にない限り、実行時にこれを C++ メソッド呼び出しに解決することはできません。そして、それはパラメータさえ考慮していません。

さらに、Objective-C 構文は実際には「マクロ互換」ではないため、これを隠すためにマクロを使用することは期待できません: ある程度、関数呼び出しをマクロ呼び出しに置き換えて、隠しパラメーターを追加したり、追加したりすることができます。似たようなもの (ただし、C++ ではこれはメソッドでは機能しません...) ですが、Objective-C の呼び出しでは構文がまったく異なるため、これを行うことはできません。

編集:「C++ を読み取り、適切な Objective-C コードを作成するための適切なプリプロセッサを作成しない限り、不可能です」。もちろん、それはいつでも可能です。しかし、C++ が地球上で最も単純な言語ではないことを考えると、多くの作業も必要です。

于 2012-09-10T08:37:23.637 に答える