PrevUpHomeNext

boost::signals2 missile reviewer @cpp


boost::signals2 导弹和审查员 - cpp

cpp/c++ boost::signals2

boost::signals2 是一种设计模式观察者模式的实现。boost::signals2 用一种简单的方法实现了信号的任意发送,在代码中非常好用。

3月 - fayige.top

cpp 代码实现

c++ 信号,boost::signals2

以游戏中的导弹为例子。

在本代码中,以导弹和审查员为例,导弹就是我们的 signal 源,当它被发射后, 就会将信息发送给审查员。

missile - 导弹

c++ boost::signals2 例子

文件名:sig2_missile_reviewer.cpp

#include <boost/signals2.hpp>
#include <iostream>
#include <iomanip>		// std::quoted

namespace sig2 = boost::signals2;

using signal_type = sig2::signal<void(std::string)>;	// 函数对象类型 void(std::string)
using slot_type = signal_type::slot_type;
using connection_type = sig2::connection;

using std::placeholders::_1;

namespace wp
{

// 导弹类
class missile
{
protected:
	signal_type sig;
public:
	virtual ~missile() {}
public:
	connection_type connect(const slot_type & slot)
	{
		return sig.connect(slot);
	}
public:
	void launch() const
	{
		std::cout << "发射导弹 ..." << std::endl;
		sig("发送信息:导弹被发射了");
	}
};

}	// namespace wp

namespace viewer
{

// 审查员
class reviewer
{
protected:
	wp::missile & missile;
	connection_type connection;
public:
	reviewer(wp::missile & missile__):
		missile{missile__}
	{
		connection = missile.connect(boost::bind(&viewer::reviewer::receive, this, _1));
	}
public:
	void receive(const std::string & msg) const
	{
		std::cout << "收到信息:" << std::quoted(msg) << std::endl;
	}
};

}	// namespace viewer

int main()
{
	wp::missile missile;		// 声明一枚导弹
	viewer::reviewer reviewer{missile};		// 声明一名审查员
	missile.launch();		// 发射导弹,你猜会发生什么?
}

输出:

发射导弹 ...
收到信息:"发送信息:导弹被发射了"

相关链接

c++桥接模式

c++适配器模式









首页:发一格 fayige.top









版权

Copyright 2024 fayige.top

Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)


PrevUpHomeNext