gpt4 book ai didi

c++ - 如何从循环中的 vector 调用 shared_ptr

转载 作者:行者123 更新时间:2023-11-30 02:10:20 25 4
gpt4 key购买 nike

我有一个使用 boost::signal 的有效回调系统。我正在将它扩展到一个更灵活、更高效的回调管理器中,该管理器将 shared_ptr vector 用于我的信号。我已经能够成功创建回调并将其添加到列表中,但我不清楚如何实际执行信号。

...

// 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,而不是回调对象:

        // (* i)(data, size); // <-- Dereferencing doesn't work

尝试取消引用两次:

        (**i)(data, size);

您可以选择调用:

        (*i)->operator()(data, size);

关于c++ - 如何从循环中的 vector 调用 shared_ptr<boost::signal>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4719926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com