C++信号
C++中各个类之间通讯主要通过指针,得相互include来include去,依赖关系很是复杂头痛。一个简单的方法是用信号来进行通讯:可以在发出信号的类中定义和发出信号,可以设为私有,这样可以防止其他类发出这种信号,而在被调用的类中定义被调用函数。初始化之后再链接信号和被调用函数。如以下使用了sigc++的例子(此例子来自gtkmm development team,以GNU General Public License version 2发布);
//server.h
#include <sigc++/sigc++.h>
class Server
{
public:
Server();
virtual ~Server();
virtual void do_something();
//signal accessor:
typedef sigc::signal<void, bool, int> type_signal_something;
type_signal_something signal_something();
protected:
type_signal_something m_signal_something;
};
//server.cc
#include "server.h"
#include <iostream>
Server::Server()
{
}
Server::~Server()
{
}
Server::type_signal_something Server::signal_something()
{
return m_signal_something;
}
void Server::do_something()
{
m_signal_something.emit(false, 5);
}
//client.h
#include <sigc++/sigc++.h>
//Client must inherit from sigc::trackable.
//because libsigc++ needs to keep track of the lifetime of signal handlers.
class Client : public sigc::trackable
{
public:
Client();
virtual ~Client();
//Signal handler:
virtual void on_server_something(bool a, int b);
};
//client.cc
#include "client.h"
#include <iostream>
Client::Client()
{
}
Client::~Client()
{
}
void Client::on_server_something(bool a, int b)
{
std::cout << "Client::on_server_something() called with these parameters: "
<< a << ", " << b << std::endl;
}
C++信号
最新推荐文章于 2024-07-10 22:49:54 发布