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