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