我有一个带有信号成员的类,用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
}
答案 0 :(得分:7)
使用在信号类型
中声明的类型“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);