Model of
Description
The chain class chains together multiple copies of the same component.
Example
signals::chain<void(float), UnfusedDoublerClass> doubling_chain(4, NULL); signals::storage<void (float)> floater(1.0f); signals::storage<void (float)> collector(0.0f); floater >>= doubling_chain >>= collector; floater.send(); BOOST_CHECK_EQUAL(collector.at<0>(), 16.0f);
The example above uses the following classes:
class UnfusedDoublerClass : public signals::filter<UnfusedDoublerClass, void (float)> { public: typedef void result_type; void operator()(float x) {out(2*x);} }; class FusedDoublerClass : public signals::fusion_filter<FusedDoublerClass, void (float), mpl::vector<>, signals::output::fused> { public: typedef void result_type; void operator()(const fusion::vector<float> &x) { // this could be more general but I'm having problems with the general approach... fusion::vector<float> y; boost::fusion::at_c<0>(y) = 2 * boost::fusion::at_c<0>(x); fused_out(y); } };