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);
    }
};