boost::bind und boost::lambda

Beispiel mit bind

...
#include <boost/bind.hpp>

// the A class
class A
{
public:
	A() :i_(0){}

	void reset()
	{
		i_ = 0;
	}
	void set(int i)
	{
		i_ = i;
	}
	int get() const
	{
		return i_;
	}
private:
	int i_;
};
// the Sum struct
struct Sum
{
	template<typename It>
	Sum(It first, It last) : i_(0)
	{
		for_each(first, last, boost::bind(&Sum::add, this, _1));
	}
	void add(int i)
	{
		i_ += i;
	}
	int i_;
};

int add(int * n, const A & a)
{
	*n += a.get();
	return *n;
}
// main function
int main(....)
{

	vector<A> v(3);
	for_each(v.begin(), v.end(), boost::bind(&A::set, _1, 99));

	int sum = 0;
	for_each(v.begin(), v.end(), boost::bind(&add, &sum, _1));

	for_each(v.begin(), v.end(), boost::bind(&A::reset, _1));

	int ints[10] ={1,2,3,4,5,6,7,8,9,10};
	Sum s(ints, ints+10);

	return 0;
}

Sum mit lambda

#include <boost/lambda/lambda.hpp>
using namespace boost::lambda;
struct Sum
{
	template<typename It>
	Sum(It first, It last) : i_(0)
	{
		for_each(first, last, i_ += _1);
	}
	int i_;
};

Links

  1. bind library
  2. lambda library

Diskussion

Sende ein Kommentar, Frage, Korrekturen, Beschimpfungen...

Name:

Nachricht:


doxapp c++
Zur Übersicht
home