Сделал такую библиотеку. Пока что черновой вариант. Если привести код в порядок, вылизать, будет библиотека — замена части Boost, связанной с Лямбда функциями. Так что критикуйте и делайте предложения по улучшению библиотеки.
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;
}
};
Здравствуйте, Tonal-, Вы писали:
T>Здравствуйте, maggot, Вы писали: M>>Сделал такую библиотеку. Пока что черновой вариант. Если привести код в порядок, вылизать, будет библиотека — замена части Boost, связанной с Лямбда функциями. Так что критикуйте и делайте предложения по улучшению библиотеки. T>Не компилится gcc. Проверял на g++ (GCC) 3.4.5 (mingw special) и g++-dw2 (GCC) 4.2.1-dw2 (mingw32-2) T>Не находит PP_ENUM_CAT_D_IMPL.
А Boost Preprocessor работает на этом компиляторе?
Проблема вот в чём:
#define ZZ(d, s, n)
#define XX(s1, s2) s1, s2
#define YY(ds, n) ZZ(XX ds, n) //Ошибка. Компилятор пишет, что у ZZ должно быть три параметра, но дано только два.
YY((2,3),5)
Здравствуйте, maggot, Вы писали:
M>Сделал такую библиотеку. Пока что черновой вариант. Если привести код в порядок, вылизать, будет библиотека — замена части Boost, связанной с Лямбда функциями. Так что критикуйте и делайте предложения по улучшению библиотеки.
Здравствуйте, maggot, Вы писали: M>Сделал такую библиотеку. Пока что черновой вариант. Если привести код в порядок, вылизать, будет библиотека — замена части Boost, связанной с Лямбда функциями. Так что критикуйте и делайте предложения по улучшению библиотеки.
Не компилится gcc. Проверял на g++ (GCC) 3.4.5 (mingw special) и g++-dw2 (GCC) 4.2.1-dw2 (mingw32-2)
Не находит PP_ENUM_CAT_D_IMPL.
Здравствуйте, Tonal-, Вы писали:
T>Здравствуйте, maggot, Вы писали: M>>Сделал такую библиотеку. Пока что черновой вариант. Если привести код в порядок, вылизать, будет библиотека — замена части Boost, связанной с Лямбда функциями. Так что критикуйте и делайте предложения по улучшению библиотеки. T>Не компилится gcc. Проверял на g++ (GCC) 3.4.5 (mingw special) и g++-dw2 (GCC) 4.2.1-dw2 (mingw32-2) T>Не находит PP_ENUM_CAT_D_IMPL.
Да, я не пробовал GCC компилировать. Работает точно на MSVC 8.0 и 9.0
Здравствуйте, ArtDenis, Вы писали:
AD>Здравствуйте, maggot, Вы писали:
M>>Сделал такую библиотеку. Пока что черновой вариант. Если привести код в порядок, вылизать, будет библиотека — замена части Boost, связанной с Лямбда функциями. Так что критикуйте и делайте предложения по улучшению библиотеки.
AD>Эх... Вот если бы твоя лямбда вот так умела: AD>
Так неинтересно и слишком громоздко. Интересует именно упрощённый синтаксис __0->foo или __0::foo без наворотов типа __0->*&test_class1::foo. Думаю, после выхода boost::lambda многие разочаровались в том, что С++ не позволяет такие упрощённые конструкции и потеряли к этой либе всякий интерес.
Здравствуйте, ArtDenis, Вы писали:
AD>Думаю, после выхода boost::lambda многие разочаровались в том, что С++ не позволяет такие упрощённые конструкции и потеряли к этой либе всякий интерес.
Так что я пока не вижу смысла изобретать свой велосипед, с учётом того, что он не будет лучше оригинала
M>#define ZZ(d, s, n)
M>#define XX(s1, s2) s1, s2
M>#define YY(ds, n) ZZ(XX ds, n) //Ошибка. Компилятор пишет, что у ZZ должно быть три параметра, но дано только два.
M>YY((2,3),5)
M>
Судя по всему какие-то расширения препроцессора от MS.
P.S. Собственно по этому лямбда в босте такая объёмная — ей нужно работать не только на VC последний версии, но и на всех остальных распастранённых компиляторах.