The easiest way to implement new Dataflow.Signals components is to inherit filter or consumer classes. Inherit the filter class when your component needs an output, and the consumer class when you only need inputs.
Here is an example of simple classes which inherit filter or consumer:
class DoublerClass : public signals::filter<DoublerClass, void(int)> { public: void operator()(int x) {out(2*x);} }; struct receiver : public signals::consumer<receiver> { receiver() : stored(0) {} void operator()(int x) { stored = x; } int stored; };
With the components implemented, we can use them with the usual free functions and operators.
DoublerClass doubler1, doubler2; receiver collector; doubler1 >>= doubler2 >>= collector; doubler1(1); BOOST_CHECK_EQUAL(collector.stored, 4);