boost::signals2 - c++ boost

boost::signals2 is a signal/slot implementation by boost c++ library.

boost::signal2 makes event programming simple anywhere across any c++ code.

boost::signals2 c++ example:

#include <boost/signals2.hpp>
#include <string>
#include <iostream>
#include <functional>

namespace bsig = boost::signals2;
using std::string_literals::operator""s;

namespace asig
{
	using signal_type = bsig::signal<bool(std::string)>;
	using slot_type = asig::signal_type::slot_type;
	using connection_type = bsig::connection;
	using dint = int;
}

namespace render
{
	// A cube also plays as event source.
	class cube
	{
	private:
		asig::signal_type __signal;
	public:
		asig::connection_type connect(const asig::dint prior, const asig::slot_type & slot__)
		{
			return __signal.connect(prior, slot__);
		}
	public:
		void draw(const asig::dint id__)
		{
			auto result = __signal(
				"A cube is rendering: id "s + std::to_string(id__)
			);
			if (result && * result)
				std::cout << "signal OK\n";
			else
				std::cout << "signal has error\n";
		}
	};

	// A viewer
	class logger
	{
	private:
		asig::connection_type __connection;
	public:
		virtual ~logger()
		{
			__connection.disconnect();
		}
	public:
		logger(const asig::dint prior__, render::cube & cube__):
			__connection{
				cube__.connect(
					prior__,
					std::bind(
						&render::logger::update,
						this,
						std::placeholders::_1
					)
				)
			}
		{
		}
	public:
		bool update(const std::string & msg__)
		{
			std::cout << "msg: " << msg__ << std::endl;
			return true;
		}
	};
}

int main()
{
	render::cube cube;
	render::logger logger{1, cube};
	render::logger logger2{2, cube};
	cube.draw(1000);
}

Mon Aug 11 11:20:57 PM UTC 2025