4

私は iphone SDK を使用しており、主に C++ でコーディングしていますが、obj-c で SDK の一部を使用しています。obj-c クラスが必要な状況で C++ クラスを指定することは可能ですか? 例えば:

1) デリゲートを obj-c オブジェクトに設定する場合。

  • C++ クラスを Delegate プロトコルから派生させることはできないため、これとおそらく他の理由により、C++ クラスをさまざまな obj-c オブジェクトのデリゲートにすることができません。私が解決策として行うことは、C++ クラスへの ptr を含み、デリゲートとして使用される obj-c アダプター クラスを作成することです (呼び出されたときに C++ クラスに通知します)。C++ クラスへのデリゲート通知を取得する必要があるたびに、これらを記述するのは面倒です。

2) セレクターの設定時

  • これは項目 1 と密接に関連しています。たとえば、ボタンの押下や UIView アニメーション機能の setAnimationDidStopSelector など、何かが完了したときにコールバックを起動するように設定したいとします。setAnimationDelegate の関連デリゲートとともに C++ 関数を指定できると便利です。

ええと、これは簡単にはできないと思いますが、もしそうならそれを行う方法、またはそのようなことをより簡単に書く方法について誰か提案があれば、私はそれらを聞きたいです. ありがとう。

4

1 に答える 1

1

残念なことに、アダプターを完全に回避することはできませんが仕事を楽にすることはできます。Objective-C ランタイム ライブラリを使用すると、宣言型のアプローチでアダプターを生成することで煩雑さを軽減できます。

Objective-C ランタイムを使用すると、メソッドの実装関数を設定できるクラスを実行時に構築できます。テンプレートを使用すると、必要な C++ メソッドを呼び出すトランポリン関数を生成することで、型指向の宣言から Objective-C クラスを生成できます。

私はしばらく前にプロトタイプを開始しましたが、あなたの場合はそこに記載されている状態で十分かもしれません. これを改善し、プロパティと分散オブジェクトもきれいにサポートすることは可能ですが、より良いバージョンを実装する時間はまだありません。

于 2010-05-26T01:06:04.763 に答える