For instance, using constant_type<>::type could we define constant to be used in our expression, besides, we see here also how to redefine the name for the placeholders:
#include <iostream>
#include <vector>
#include <algorithm>
#include "boost/lambda/lambda.hpp"
#include "boost/lambda/bind.hpp"
#include "boost/function.hpp"
using std::cout;
using std::endl;
namespace
{
template <typename T, typename Operation>
void for_all(T& t, Operation op) { std::for_each(t.begin(), t.end(), op); }
template<typename T>
void lambdaBoost(const T& t)
{
using namespace boost::lambda;
constant_type<char>::type space = constant(' ');
boost::lambda::placeholder1_type _;
boost::function<void(T::value_type)> f = cout << _ << space;
for_all(t, f);
cout << endl;
}
template<typename T>
void lambda0x(const T& t)
{
auto f = [] (T::value_type x) { cout << x << ' '; } ;
for_all(t, f);
cout << endl;
}
}
void lambda04()
{
std::vector<int> v;
for(int i = 0; i < 5; ++i)
v.push_back(i);
lambdaBoost(v);
lambda0x(v);
}
For more information on boost lambda you could read "Beyond the C++ Standard Library: An Introduction to Boost", by Björn Karlsson, an Addison Wesley Professional book.
No comments:
Post a Comment