私はネットワーキングのために(boost :: asioを介して)使用するC++クラスを持っています。これは便利なことをするためにコールバック関数を使う必要があります。 私は、このクラスを利用するObjective-C++の混合プロジェクトも持っています。 にObjCクラスのシングルトンを使用して、私のサブクラスUIViewController
クラスのそれぞれは、順番に、シングルトンインスタンスを経由して、それぞれのクラスのメンバメソッドを呼び出してそのクラスの実装ファイル内で定義された標準のC/C++方法、に結合することが可能である:関数は、C++で使用するobjcクラスメンバメソッドへのポインタですか?
@interface MyViewControllerClass()
+ (instancetype)Instance;
@end
MyViewControllerClass *_MyViewControllerClass_Instance;
void cppCallback() {
// This method gets called from the C++ class
[[MyViewControllerClass Instance] objcCallback];
}
@implementation MyViewControllerClass
+ (instancetype)Instance {
return _MyViewControllerClass_Instance;
}
- (void)viewDidLoad
{
_MyViewControllerClass_Instance = self;
// Pass &cppCallback to the C++ class here, so it can be called later
}
- (void)objcCallback {
;// Do something here
}
@end
これは見た目が醜いので、過去にはうまくいきました。しかし、今私は新しい壁を打ちました... UICollectionViewCell
サブクラスの中からC++ネットワーキングクラスを利用する必要があります。これはシングルトンの使用がうまくいかないことを意味します。
どうすればobjcクラスメソッドへのポインタをC++パラメータとして渡すことができますか?
私の唯一のオプションは、Objective-CラッパークラスをC++ネットワーキングクラス用に書くことですか?
コールバックにはユーザー、情報などの引数はありません。通常、コールバックはこの問題を正確に解決するためにこれを行います。 –