Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

Multiple outputs

Multiple outputs can be achieved by introducing additional signals in the class.

Table 1.11. multiple outs example

fused

unfused

SignalOutIntFloat multi_out(2.5f);
signals::storage<void (float), signals::unfused> float_collector(0);
signals::storage<void (int), signals::unfused> int_collector(0);

multi_out >>= float_collector;
multi_out.out_int >>= int_collector;
multi_out();

BOOST_CHECK_EQUAL(float_collector.at<0>(), 2.5f);
BOOST_CHECK_EQUAL(int_collector.at<0>(), 2);

The example uses the following classes:

class SignalOutIntFloat : public signals::filter<void (float), signals::unfused>
{
public:
    SignalOutIntFloat(float x) : x(x) {}
    void operator()()
    {
        out(x);
        out_int((int)x);
    }
    boost::signal<void (int)> out_int;
private:
    float x;
}; // end class SignalOutIntFloat

Copyright © 2007 Stjepan Rajko

PrevUpHomeNext