
Dear all, The accumulators library is a very nice way to get a set of statistics for a stream of numbers, doubles, say. Now let’s suppose I’m receiving a stream of boost::optional<double>s – e.g. let’s suppose I’m receiving simulation results and some simulations fail. It would be neat if I could somehow write and “adaptor accumulator” that took this stream of optionals and then, if they are not empty, pass them to an underlying accumulator. In rough terms: template<typename UnderlyingAccumulator , typename Sample > struct accumulator_adaptor { template<typename Args> void operator()( Args const& args) { Sample const& s = args[sample]; if( s ) { m_underlying_accumulator( *s ) ; //doesn’t compile UnderlyingAccumulator expects an Args, not a Sample } } private: UnderlyingAccumulator m_underlying_accumulator; }; (we might also define another accumulator that just counts the number of “bad” samples. Then by adding an appropriate feature adaptor, one could write something like accumulator_set< boost::optional<double> , tag::accumulator_adaptor< mean > , tag::bad_samples_count > For the data 1.0,2.0,boost::optional<double>(),4.0 This would return a mean of 7/3 and a bad_samples_count of 1. Is it possible for me to implement such an adaptor that would work for an arbitrary underlying accumulator? Thanks for your interest, Pete