![]() |
Home | Libraries | People | FAQ | More |
It is simple to have an object provide multiple slots through operator() functions of different signatures. The following class does so through providing unary slots of different types:
class SignalIntFloatCollector { optional<int> last_int; optional<float> last_float; public: typedef void result_type; void operator()(int x) { last_int = x; } void operator()(float x) { last_float = x; } optional<int> GetLastInt() { return last_int; } optional<float> GetLastFloat() { return last_float; } }; // end class SignalIntFloatCollector
In such cases, where the operator() functions differ in their signature, standard connection operators will work out the correct connection:
Table 1.9. multiple slots example
|
fused |
unfused |
|---|---|
|
|
signals::storage<void (), signals::unfused> banger; signals::storage<void (float), signals::unfused> floater; floater(2.5f); SignalFloatDuplicator duplicator; SignalMultiCollector collector; banger | collector | (floater | collector | (duplicator >>= collector)).send_slot(); banger(); BOOST_CHECK_EQUAL(collector.GetCount(), 1); BOOST_CHECK_EQUAL(collector.GetLast(), optional<float>(2.5f)); BOOST_CHECK_EQUAL(collector.GetLast1(), optional<float>(2.5f)); BOOST_CHECK_EQUAL(collector.GetLast2(), optional<float>(2.5f));
|
| Copyright © 2007 Stjepan Rajko |