この質問をする前にかなりのリンクを見てきましたが、std :: function、std:bindおよびC++のコールバックについてかなり読んでいます。私が理解しているように、このコンセプトは、イベントハンドラが特定のイベントが発生した後にリスナーに通知することが主な目的です。私はプログラミングのこのスタイルに初心者であるので、ライブラリの境界を越えて適用されるとき、私は正しい実装を見つけるのに苦労しています。私は、ライブラリを持ってC++ std :: functionメソッドを公開せずにライブラリ間でコールバックをバインドするAPI
の中で特定のデータを受け取り、何らかの処理を行うクラスのプライベート機能を有する:
は、ここで私が実装する必要がある状況やデザインです。ライブラリAに必要な機能と同じデータを提供するライブラリBがありますが、ライブラリBはstd ::関数を公開してそのデータを受け取ります。他のライブラリは、その関数をそのコールバックにバインドしてデータを受け取る必要があります。ですから、libraryAのfunc
を、私のアプリケーションクラスのlibraryBのstd ::関数にバインドする必要があります。
Inside libraryA {
Class A {
private:
AA objAA;
}
Class AA {
private:
void func(int x) {
//this is the function I want to tie to calback in library libB without exposing the method api
//How can I expose a public api to return the address of this function so that the app can bind it to libraryB's callback ?
}
}
}
Inside libraryB {
Class B {
public:
void registerCallback(std::function<void (int)> callmePls) {
m_callback = callmePls;
}
private:
typedef std::function<void (int)> theCallback;
theCallback m_callback;
}
}
Inside my Application which uses both libraryA & libraryB {
//How can I bind/assign “func” in libraryA to the callback in libraryB ?
}
にはどうすればアプリがlibraryBのコールバックにバインドできるように、興味のある関数のアドレスを返すためにlibraryAから公開APIを公開することができますか? libraryAの "func"をlibraryBのコールバックにバインドまたは割り当てる方法はありますか? (ないヘッダー内).cpp
ファイルに実装機関と
鮮明な答えをありがとう。 2番目のソリューションでは、libraryAのstd :: functionを取得し、libraryBのコールバックに割り当てる必要があります。 –
@NelsonPはい、私は 'class A'のインターフェースに追加しました。 – Yakk