gpt4 book ai didi

c++ - 使用 boost.signals2 如何将动态分配的对象连接到信号

转载 作者:行者123 更新时间:2023-11-28 03:17:05 30 4
gpt4 key购买 nike

我有一个名为 Candidate 的类,其中包含一个名为 DataUpdate() 的函数。我打算动态创建 Candidate 的许多实例,并让每个实例将其函数 DataUpdate() 作为插槽连接到 boost.signals2 信号;准备接收信号。

我在下面开发的代码给出了错误:

Error 2 error C2276: '&' : illegal operation on bound member function expression

我不确定实现预期结果的正确代码。问题似乎在于取消引用指针 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;
}

关于c++ - 使用 boost.signals2 如何将动态分配的对象连接到信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16525649/

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