|
Boost Users : |
From: Kim Kuen Tang (kuentang_at_[hidden])
Date: 2008-08-31 07:18:07
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/user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework.
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 <boost/accumulators/framework/accumulator_base.hpp>
#include <boost/accumulators/framework/parameters/sample.hpp>
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<<sumacc.result(*dont_care(0.0)*)<<"\n";
return EXIT_SUCCESS;
}
catch(std::exception& e)
{
std::cout<<"Errors with message: "<<e.what()<<"\n";
return EXIT_FAILURE;
}
catch(...)
{
std::cout<<"Unknown Errors \n";
return EXIT_FAILURE;
}
}
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net