使用boost.如何将动态分配的对象连接到信号
Using boost.signals2 how do I connect dynamically allocated objects to a signal
我有一个名为Candidate
的类,其中包含一个名为DataUpdate()
的函数。我打算动态地创建候选的许多实例,并使每个实例将其功能DataUpdate()
作为插槽连接到boost.signals2
信号;准备好接收信号。
我在下面开发的代码给出了错误:
错误2:'&':绑定成员函数表达式的非法操作
我不确定实现预期结果的正确代码。问题似乎在于对指针candidateInstance
进行解引用,以获取实例的DataUpdate()
函数的地址以传递给signal.connect()
。有人能告诉我正确的方法吗?
Candidate *candidateInstance;
//INSTANTIATE CANDIDATE INSTANCE
++DataStream::ID;//increment static variable
candidatesVector.push_back(candidateInstance = new Candidate(ID));
//CONNECT DATAUPDATE() OF CANDIDATE INSTANCE
signal.connect( &((*candidateInstance).DataUpdate) );
//FIRE SIGNAL
signal(BarNumber(), DateTime(), Open(), High(), Low(), Close());
应该使用bind
来创建成员函数的包装器。
#include <iostream>
#include <memory>
#include <functional>
#include <boost/signals2.hpp>
class Foo
{
public:
void foo()
{
std::cout << "I'm foo() from Foo, this == " << this << std::endl;
}
};
int main()
{
auto foo_ptr = std::make_shared<Foo>();
boost::signals2::signal<void()> sig;
sig.connect(std::bind(&Foo::foo, foo_ptr));
sig();
return 0;
}
相关文章:
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- 通过 COM 对象连接 x64 应用程序时出现问题
- 连接信号(Qstring)白色插槽(字符串)的2个不同类别
- 可以在 QObject::connect() C++中连接 QML 对象现有信号?
- 在 for 循环中使用 lambda 函数连接信号插槽
- Qt - 使用λ函数修改先前连接信号的插槽参数
- 如何在Qt中向QThread类的特定对象发出信号
- 错误:QACTION ::触发受到保护 - 无法连接信号
- QT对象::连接:没有此类插槽信号到线程插槽
- 在Qt中的线程之间发送对象作为信号参数
- Qt:在QNetworkAccessManager中发送请求后连接信号
- 对象::连接:当 obj 作为shared_ptr返回时没有这样的信号
- 需要关于对象/连接池项目的RAII设计的建议
- Qt:连接信号和插槽
- 嵌套的直接连接信号导致段错误
- 将返回对象的信号连接到没有参数的插槽
- Qt:从文本连接信号和插槽
- 动态创建自定义小部件的新实例并连接信号和插槽(Qt)
- 动态地向集合中的一个对象发出信号
- 使用boost.如何将动态分配的对象连接到信号