$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] [local] Help for the Alternatives section
From: lcaminiti (lorcaminiti_at_[hidden])
Date: 2011-03-29 09:45:11
Joel de Guzman-2 wrote:
> 
> On 3/29/2011 12:37 AM, lcaminiti wrote:
> >
> > This worked :)) Finally Boost.Local's Phoenix example reads:
> >
> > #include<boost/spirit/include/phoenix.hpp>
> > #include
> > #include
> > #include
> >
> > int main() {
> >      double sum = 0.0;
> >      int factor = 10;
> >
> >      std::vector v(3);
> >      v[0] = 1.0; v[1] = 2.0; v[2] = 3.0;
> >
> >      // Passed as template parameter and also defined at expression
> level.
> >      std::for_each(v.begin(), v.end(), boost::phoenix::let(
> >              // Bind `factor` by constant (reference).
> >              boost::phoenix::local_names::_f =
> boost::phoenix::cref(factor))[
> >          // Unfortunately, body cannot use C++ statement syntax.
> >          // Access `sum` by (non-constant) reference.
> >          boost::phoenix::ref(sum) += boost::phoenix::local_names::_f
> *
> >                  boost::phoenix::arg_names::_1,
> >          std::cout<<  boost::phoenix::val("Summed:
> ")<<
> >                  boost::phoenix::ref(sum)<<  "\n"
> >      ]);
> >
> >      std::cout<<  sum<<  std::endl;
> >      return 0;
> > }
> >
> > BTW, this is pretty powerful stuff ;)
> 
> I'd use using declarations to avoid code clutter and make the
> code more readable.
> 
> int main() {
>      double sum = 0.0;
>      int factor = 10;
> 
>      std::vector v(3);
>      v[0] = 1.0; v[1] = 2.0; v[2] = 3.0;
> 
>      using boost::phoenix::let;
>      using boost::phoenix::local_names::_f;
>      using boost::phoenix::cref;
>      using boost::phoenix::ref;
>      using boost::phoenix::arg_names::_1;
>      using boost::phoenix::val;
> 
>      // Passed as template parameter and also defined at expression level.
>      std::for_each(v.begin(), v.end(), let(
>              // Bind `factor` by constant (reference).
>              _f = cref(factor))[
>          // Unfortunately, body cannot use C++ statement syntax.
>          // Access `sum` by (non-constant) reference.
>          ref(sum) += _f * _1,
>          std::cout << val("Summed: ") << ref(sum)
> << "\n"
>      ]);
> 
>      std::cout << sum << std::endl;
>      return 0;
> }
> 
Yes and I will do the same for the Boost.Lambda example.
Thanks.
--Lorenzo
-- View this message in context: http://boost.2283326.n4.nabble.com/local-Help-for-the-Alternatives-section-tp3408469p3414851.html Sent from the Boost - Dev mailing list archive at Nabble.com.