gpt4 book ai didi

c++ - 将 boost::signal 作为 boost::function 传递

转载 作者:太空狗 更新时间:2023-10-29 20:18:43 25 4
gpt4 key购买 nike

我有一个用 boost::function 封装了信号成员的类。

是否可以使用此 API 添加另一个信号作为处理程序?

class Foo
{
public:
VOID AddHandler(boost::function<VOID()> handler)
{
m_signal.connect(handler);
}

private:
boost::signal<VOID()> m_signal;
};

boost::signal<VOID()> signal;

VOID SignalCaller()
{
signal();
}

int main( )
{
Foo foo;
//foo.AddHandler(signal); // I want to
foo.AddHandler(&SignalCaller); // I have to
}

最佳答案

使用在信号类型中声明的类型“slot_type”

class Foo
{
public:
typedef boost::signal0<void> Signal;
typedef Signal::slot_type Slot;

//allowed any handler type which is convertible to Slot
void AddHandler(Slot handler)
{
m_signal.connect(handler);
}
private:
Signal m_signal;
};

void f()
{
std::cout << "f() called";
}

//usage
Foo foo;
foo.AddHandler(signal);
foo.AddHandler(&f);

关于c++ - 将 boost::signal 作为 boost::function 传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3296456/

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