Live demo link:
#include <iostream>
#include <functional>
template <typename Arg1, typename Arg2, typename Cap1, typename Cap2>
struct my_lambda : std::binary_function<Arg1, Arg2, void>
{
my_lambda(const Cap1& c1, const Cap2& c2) : cap1(c1), cap2(c2) {}
void operator()(const Arg1& arg1, const Arg2& arg2) const
{
// lambda body
std::cout << (cap1 + cap2 + arg1 + arg2) << std::endl;
}
mutable Cap1 cap1;
mutable Cap2 cap2;
};
template <typename Arg1, typename Arg2, typename Cap1, typename Cap2>
my_lambda<Arg1, Arg2, Cap1, Cap2> lambda(const Cap1& c1, const Cap2& c2)
{
return my_lambda<Arg1, Arg2, Cap1, Cap2>(c1, c2);
}
int main()
{
int i = 1, j = 2;
lambda<int, int>(i, j)(3, 4);
// same as:
// [i, j] (int a, int b)
// {
// std::cout << (i + j + a + b) << std::endl;
// } (3, 4);
}
使用谓词。我不认为C++ 0x中的lambda表达式有100行以上的代码。 – 2014-08-29 08:14:03
SURELY如果你的lambda函数是100行,它并不打算成为一个lambda函数呢?当它们适合一两行时,Lambda非常棒,但除此之外,您需要可用于设置断点的真实函数等。 – 2014-08-29 08:16:01
编写您自己的函数结构只需~15行开销 – 2014-08-29 08:16:06