7

私は最近iOSゲームの作業を開始し、プロジェクトの別の部分をC++で作成することにしました。このアプローチは、Objective Cクラスが単に一部のメンバーにアクセスするか、C ++オブジェクトの関数を呼び出す限り、正常に機能するようです。ただし、ObjectiveCクラスをC++クラスの「イベント」に応答させるための洗練された方法を見つけることができないようです。コールバックを使用するイベント処理システムは問題外のようです(ObjectiveCメソッドとC++関数であり、おそらく互換性がないため)。私が考えることができるのは、デリゲートパターンを使用し、C ++デリゲートクラスの周りにラッパークラスを記述して、ObjectiveCコードで使用できるようにすることだけです。だから私の質問は:これを行うためのより良い方法はありますか?

注意:これらのクラスはプラットフォームに依存しないと想定されているため、C++ファイルでObjectiveCを直接使用しないようにしたいと思います。

4

2 に答える 2

4

CoreVideo が使用するメカニズムを検討することをお勧めします。

彼らのモデルには、C コールバック関数 ( http://tinyurl.com/axtxajf ) を登録するメカニズムがあり、この関数のパラメーターの 1 つは void* であり、Objective-C クラスに型キャストできます。にアクセスする必要があります。

コールバック関数を登録するために C++ モジュールに実装できる C 関数の例を次に示します。パラメータは、コールバック関数とクラス インスタンスへのポインタです。

SetEventCallback(EventCallbackFunction, self);

イベントを処理する必要がある場合、コールバック関数が呼び出され、void* を型キャストして Obj-C クラスを呼び出し、メソッドを呼び出すことができます。

void EventCallbackFunction(void* objCPtr)
{
    [(MyObjCClass*)objCPtr someMethod];
}
于 2013-01-15T00:44:12.063 に答える
1

C++0x ラムダ関数を使用できます。それらは Objective-C ブロックと交換可能 (相互に割り当て可能) です。

于 2013-01-15T08:26:58.673 に答える