Сделал такую библиотеку. Пока что черновой вариант. Если привести код в порядок, вылизать, будет библиотека — замена части Boost, связанной с Лямбда функциями. Так что критикуйте и делайте предложения по улучшению библиотеки.
1) В делегатах использовал идеи из статьи про
Быстрые ДелегатыАвтор(ы): Don Clugston
Дата: 27.07.2005
В данной статье предоставлен исчерпывающий материал по указателям на функции-члены, а также приведена реализация делегатов, которые занимают всего две операции на ассемблере.
2) Прикрутил к ним Лямбда функции.
3) Размер библиотеки пытался сделать как можно меньше в отличие от Boost (кто считал, сколько там строк? ). И я думаю это получилось: класс делегатов — 165 строк. Лямбда функции — 260 строк. Bind — 80 строк. Нет, я не лепил всё в одну строку

4) По скорости, я думаю, должно быть достаточно быстро. Просто не знаю, с чем и как сравнивать и как. Скажите, сделаю тесты.
Вот примеры кода:
int test_fun1(int x,int& y,int z){
return x + y + z;
}
int test_fun2(int x,int& y,int z, int w){
return x + y + z;
}
double test_fun3(double x,double& y,double z){
return x + y + z;
}
double test_fun4(double a, double b, const double c, double& d){
++d;
return a + b + c + d;
}
int test_fun5(int arg, int arg3, double arg4, int sfs){
return arg + arg3 + arg4 + sfs;
}
struct test_class1{
int x;
int foo(int arg, int arg3, double arg4, int sfs){
return x + arg;
}
};
Примерно так можно использовать:
int a = 2, b = 4, c = 10, d = 7;
(cout << __0 << endl)(1234567);
cout << (__1 += (2 - __2) * (__0 + __1))(a,b,10) << endl;
test_class1 test_class1_inst1;
test_class1_inst1.x = 10;
delegate<int(int,int,double, int)> pLamFun0 = bind(&test_class1::foo, &test_class1_inst1);
delegate<int(int,int,double, int)> pLamFun1 = pLamFun0;
pLamFun0 = bind(test_fun5);
cout << "pLamFun0 : " << pLamFun0(1,a,3, 7) << endl;
cout << "pLamFun1 : " << pLamFun1(1,a,3, 7) << endl;
delegate<int(int,int&,int)> pLamFun2 = (__1 += (78 - __2) * __0 + d);
delegate<int(int,int,int)> pLamFun3 = (d += (34 - __2) * (__0 + __1));
delegate<double(double, const double, const double, double&)> pLamFun4 = bind(test_fun4, __0 * 5 + __2, 2, bind(test_fun3,__0, __3, __2), __3 );
cout << "pLamFun2 : " << pLamFun2(1,a,7) << endl;
cout << "pLamFun3 : " << pLamFun3(1,5,7) << endl;
cout << "d: " << d << endl;
double x = 3, y = 4;
cout << "pLamFun4 : " << pLamFun4(1,2,x,y) << endl;
Откуда можно скачать:
Fast Functional Library C++
PS За код не ругайте, это пока черновой вариант.