記録のために、シグナルを非静的 C++ 関数に接続することはできません。少なくとも信号の *nix の意味ではありません。これらには、this
呼び出し用のポインターが必要です。
さて、目的の C について。何をしたいかによって異なります。目的の C メソッドへのポインターをプレーン C API に渡すか、独自のシグナルのようなコールバック メカニズムを実装します。他の答えは前者に集中しています。後者について話しましょう。
自然な動作は、セレクターとオブジェクト ポインターの組み合わせを渡すことです。セレクターにはデータ型SEL
があり、@selector() コンストラクトを使用して取得されます。セレクターは、クラス階層内のメソッドを一意に識別するデータ (実際には整数) です。
コールバックを必要とするconnect_signal
関数がどこかにあるとします。
-(void)connect_signal:(SEL)callbackSelector forObject:(NSObject*)callbackObject;
次のように呼び出します (コールバック オブジェクト内から):
[xx connect_signal:@selector(MyMethod:) forObject:self];
関数内で、セレクターとオブジェクト ポインターを保存します。コールバックを呼び出す必要がある場合は、次の呼び出しを発行します。
[SavedCallbackObject performSelector:(SavedCallbackSelector) withObject: nil];
2 番目のパラメーターは、パラメーターをコールバックに渡すためのものです。複数必要な場合は、NSInvoke を参照してください。
私の答えは、ココアを想定しています。たとえば、NSObject は Cocoa クラスです。ObjC に関する最近の質問は安全な賭けです。
または、古き良き関数ポインターを使用できます。彼らはまだ周りにいます。