Boost logo

Boost Users :

Subject: Re: [Boost-users] [phoenix] accumulate with data member binding
From: Joel de Guzman (joel_at_[hidden])
Date: 2008-10-31 20:52:37


Christian Henning wrote:
> Hi there, the following snippet doesn't compile which surprises me a
> little. Could somebody tell what's wrong?
>
> #include <algorithm>
> #include <vector>
> #include <numeric>
>
> #include <boost/spirit/include/phoenix_core.hpp>
> #include <boost/spirit/include/phoenix_operator.hpp>
> #include <boost/spirit/include/phoenix_bind.hpp>
>
> using namespace boost::phoenix;
> using namespace boost::phoenix::arg_names;
> using namespace std;
>
> struct point
> {
> double _prob;
> double _x;
> };
>
> int _tmain(int argc, _TCHAR* argv[])
> {
> std::vector< point > d;
>
> double sum_prob = std::accumulate( d.begin()
> , d.end()
> , 0.0
> , bind( &point::_prob, arg1 )
> );
>
>
> return 0;
> }
>
> I'm using Visual Studio 2005. This is the error I'm getting:
>
> error C2296: '.*' : illegal, left operand has type 'double'

Rightly so. arg1 is the state. arg2 is the point. You might want to
try:

     bind( &point::_prob, arg2 )

For example,

     bind( &point::_prob, arg2 ) + arg1

adds all _prob(s)

HTH.

Regards,

-- 
Joel de Guzman
http://www.boostpro.com
http://spirit.sf.net

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