(C++) BoostSignals2Example2
February 24, 2017 · View on GitHub
(C++) BoostSignals2Example2



Boost.Signals2 example 2: emitting this is a Boost.Signals2 example that shows how to emit this.
Technical facts
Operating system(s) or programming environment(s)
Lubuntu 15.04 (vivid)
Qt Creator 3.1.1
- G++ 4.9.2
Libraries used:
STL: GNU ISO C++ Library, version
4.9.2
Qt project file: ./CppBoostSignals2Example2/CppBoostSignals2Example2.pro
include(../../ConsoleApplication.pri) include(../../Libraries/Boost.pri) SOURCES += main.cpp
./CppBoostSignals2Example2/main.cpp
#include <iostream> #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Weffc++" #pragma GCC diagnostic ignored "-Wunused-local-typedefs" #include <boost/bind.hpp> #include <boost/lambda/lambda.hpp> #include <boost/signals2.hpp> #pragma GCC diagnostic pop struct Thing { Thing(const int id) : m_signal{}, m_id(id) {} boost::signals2::signal<void (const Thing*)> m_signal; const int m_id; void EmitMe() const { m_signal(this); } }; struct Manager { Manager(): m_v{} { for (int i=0; i!=5; ++i) { boost::shared_ptr<Thing> t(new Thing(i)); //Do not forget the placeholder! t->m_signal.connect(boost::bind(&Manager::OnSignal,this, boost::lambda::_1)); m_v.push_back(t); } } void EmitRandom() { const int i = std::rand() % 5; m_v[i]->EmitMe(); } private: std::vector<boost::shared_ptr<Thing> > m_v; void OnSignal(const Thing* thing) { std::cout << thing->m_id << '\n'; } }; int main() { Manager m; for (int i=0; i!=10; ++i) m.EmitRandom(); }