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++信号
最新推荐文章于 2025-04-05 07:38:19 发布
本文介绍了一种利用C++中的信号(signal)进行类间通信的方法,通过实例展示了如何定义信号及响应函数,并实现信号的发射与接收。这种方法有助于减少类间的直接依赖。
3628

被折叠的 条评论
为什么被折叠?



