创建属于你的信号
现在你已经看到了gtkmm中的信号于信号处理函数,你可能希望你自己的类使用相同的技术进行交互。你可以很轻松的使用libsigc++库实现这个需求。
这不是单纯的gtkmm或GUI问题。gtkmm使用libsigc++实现对GTK信号系统的代理封装。而对于新的非GTK信号,你可以使用sigc::signal<>模版创建属于自己的C++信号。
例如,要创建一个发送参数类型分别为bool和int的信号,只需要按如下所示声明一个sigc::signal即可:
sigc::signal<void(bool, int)> signal_something;
你可以简单的将信号声明为公有成员变量,但是有些人讨厌这种声明,他们更喜欢如下所示的访问器方法:
class Server { public: //signal accessor: using type_signal_something = sigc::signal<void(bool, int)>; type_signal_something signal_something(); protected: type_signal_something m_signal_something; }; Server::type_signal_something Server::signal_something() { return m_signal_something; }
然后你可以使用与连接gtkmm信号一样的语法连接到这个信号。例如:
server.signal_something().connect( sigc::mem_fun(client, &Client::on_server_something) );
- C.1. 示例