|
Boost : |
Subject: Re: [boost] [local] Help for the Alternatives section
From: Lorenzo Caminiti (lorcaminiti_at_[hidden])
Date: 2011-03-27 09:48:11
On Sat, Mar 26, 2011 at 8:05 PM, Michael Caisse
<boost_at_[hidden]> wrote:
> On 03/26/2011 04:46 PM, Steven Watanabe wrote:
>>
>> AMDG
>>
>> On 03/26/2011 04:27 PM, Michael Caisse wrote:
>>>
>>> #include <boost/phoenix/phoenix.hpp>
>>> #include <boost/phoenix/statement.hpp>
>>> #include <iostream>
>>> #include <vector>
>>> #include <algorithm>
>>>
>>> int main() {
>>> double sum = 0.0;
>>> int factor = 10;
>>>
>>> using namespace boost::phoenix;
>>> using namespace boost::phoenix::placeholders;
>>>
>>> std::vector<double> v(3);
>>> v[0] = 1.0; v[1] = 2.0; v[2] = 3.0;
>>> std::for_each(v.begin(), v.end(), (
>>> ref(sum) += factor * _1,
>>> std::cout << "Summed: " << ref(sum) << "\n" )
>>> );
>>> return 0;
>>> }
>>>
>>
>> This is incorrect. std::cout << "Summed: " is evaluated
>> eagerly.
>>
>> In Christ,
>> Steven Watanabe
>
> Sorry about that:
>
> std::cout << val("Summed: ") << ref(sum) << "\n"
>
>
> or one of the other possibilities will do fine.
I tried this but it didn't work... why?
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix_core.hpp>
#include <boost/spirit/include/phoenix_operator.hpp>
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
double sum = 0.0;
int factor = 10;
std::vector<double> v(3);
v[0] = 1.0; v[1] = 2.0; v[2] = 3.0;
std::for_each(v.begin(), v.end(), (
boost::phoenix::ref(sum) += factor * boost::spirit::qi::_1,
std::cout << boost::phoenix::val("Summed: ") <<
boost::phoenix::ref(sum) << "\n"
));
std::cout << sum << std::endl;
return 0;
}
It prints:
Summed: 0
Summed: 0
Summed: 0
0
Instead of:
Summed: 10
Summed: 30
Summed: 60
60
-- Lorenzo
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk