私はboost :: signalを使用している実際のコールバックシステムを持っています。私はshared_ptrのベクトルを自分の信号に使う、より柔軟で効率的なコールバックマネージャに拡張します。私は正常に作成し、リストにコールバックを追加することができましたが、私は実際に信号を実行する方法については不明です。ループ内のベクトルからshared_ptr <boost :: signal>を呼び出す方法は?
...
// Signal aliases
typedef boost::signal<void (float *, int32_t)> Callback;
typedef std::shared_ptr<Callback> CallbackRef;
// The callback list
std::vector<CallbackRef> mCallbacks;
// Adds a callback to the list
template<typename T>
void addCallback(void (T::* callbackFunction)(float * data, int32_t size), T * callbackObject)
{
CallbackRef mCallback = CallbackRef(new Callback());
mCallback->connect(boost::function<void (float *, int32_t)>(boost::bind(callbackFunction, callbackObject, _1, _2)));
mCallbacks.push_back(mCallback);
}
// Pass the float array and its size to the callbacks
void execute(float * data, int32_t size)
{
// Iterate through the callback list
for (vector<CallbackRef>::iterator i = mCallbacks.begin(); i != mCallbacks.end(); ++i)
{
// What do I do here?
// (* i)(data, size); // <-- Dereferencing doesn't work
}
}
...
このコードはすべて動作します。私は、vectorからshared_ptrの中から呼び出しを実行する方法がわかりません。どんな助けも素敵です。前もって感謝します。 、shared_ptrのではないコールバックオブジェクトを結果を逆参照するためです
はmCallback '行います。接続する(b ...); '仕事?それは 'mCallback-> connect(...);' – Mic
にするべきではありません。あなたが正しい。実際のコードは文脈の中で長く描かれているので、私はこれを手作業で入力しました。修正しました。 – BTR