Hi all,
i ' ve written a piece of code to get the class sum_accumulator working
which is described in the user's guide
http://boost-sandbox.sourceforge.net/libs/accumulators/doc/html/accumulators....
The function result must be provided with a struct dont_care.
And the constructor of dont_care must be provided with a value to get an
instanciation.
In my opinion a default constructor taking no arguments for the struct
dont_care must exists so the user can write code like dont_care().
To get the example working i must write code like
sumacc.result(*dont_care(0.0)*) to get the result from my accumulator.
And this is a little bit unnecessary.
with regards,
Kim Tang
the code below is tested with visual studio 2008.
#include <iostream>
#include
#include
using namespace boost::accumulators;
namespace boost { // Putting your accumulators
in the
namespace accumulators { // impl namespace has some
namespace impl { // advantages. See below.
template<typename Sample>
struct sum_accumulator // All accumulators should
inherit from
: accumulator_base // accumulator_base.
{
typedef Sample result_type; // The type returned by
result() below.
template<typename Args> // The constructor takes an
argument pack.
sum_accumulator(Args const & args)
: sum(args[sample | Sample()]) // Maybe there is an initial
value in the
{ // argument pack. ('sample'
is defined in
} // sample.hpp, included above.)
template<typename Args> // The accumulate function
is the function
void operator ()(Args const & args) // call operator, and it
also accepts an
{ // argument pack.
this->sum += args[sample];
}
result_type result(dont_care) const // The result function will
also be passed
{ // an argument pack, but we
don't use it here,
return this->sum; // so we use "dont_care" as
the argument type.
}
private:
Sample sum;
};
}}}
int main()
{
try
{
boost::accumulators::impl::sum_accumulator<double>
sumacc(sample=0.0);
sumacc(sample=1.2);
std::cout<