
On Sat, Mar 26, 2011 at 6:19 PM, Lorenzo Caminiti <lorcaminiti@gmail.com> wrote:
How can I program the following code (its local function and `factor` constant binding) using Boost.Phoenix, Boost.Lambda, and C++0x lambda
***Thanks for the examples but is there a way to make `factor` const in the closure?*** Local functions can do that by `const bind factor` (const value) or `const bind& factor` (const reference). How about Boost.Lambda, Boost.Phoenix, and C++0x lambda? For example, why C++0x doesn't allow the use of const in the closure? Was this proposed to the standard committee? #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; // NOTE `const&` for factor (but not supported by C++0x). std::for_each(v.begin(), v.end(), [&sum, const &factor](double num) { sum += factor * num; std::cout << "Summed: " << sum << std::endl; }); std::cout << sum << std::endl; return 0; }
functions? If you know, can you please reply with the actual code?
#include <boost/local/function.hpp> #include <iostream> #include <vector> #include <algorithm>
int main() { double sum = 0.0; int factor = 10;
void BOOST_LOCAL_FUNCTION_PARAMS(double num, // Variable `factor` bound as constant. bind& sum, const bind& factor) { sum += factor * num; std::cout << "Summed: " << sum << std::endl; } BOOST_LOCAL_FUNCTION_NAME(add)
std::vector<double> v(3); v[0] = 1.0; v[1] = 2.0; v[2] = 3.0; // Local function `add` passed as template parameter. std::for_each(v.begin(), v.end(), add); return 0; }
Thanks. -- Lorenzo