C ++复杂的lambda表达式

时间:2017-05-09 18:06:08

标签: c++ lambda

我做了一个疯狂的项目,所以不要害怕我在CPP中创建某种lambda演算。 无论如何我如何使它工作?

auto INC_ = [=](void *arg, void *(*n)(void*, void*))-> void * {return n(arg,arg); };
auto do_ = [=](void *arg1, void *arg2)-> void * {return arg1; };
INC(a,do_);

INC_获得2个arg但是第二个arg是一个带有其他2个参数的lambda exp。

do_做2 arg必须做的事情

但是,如果我试着像3行那样一起调用它。我得错了参数错误。

所以真正的问题是如何传递2个arg lambda以便它正确执行?

1 个答案:

答案 0 :(得分:1)

lambda不是函数指针。

auto INC_ = [=](void *arg, void *(*n)(void*, void*))-> void * {return n(arg,arg); };
auto do_ = [=](void *arg1, void *arg2)-> void * {return arg1; };
INC(a,do_);

INC_的第二个参数是函数指针。

无状态lambda可以转换为具有兼容签名的函数指针。

一旦有状态,这是不可能的。 [=]使其成为有状态的,即使它没有捕获任何东西。

此外,不要在无类型代码中使用函数指针。

试试这个:

int a = 0;
auto INC_ = [](auto arg, auto n) {return n(arg,arg); };
auto do_ = [](auto arg1, auto arg2) {return arg1; };
std::cout << INC(a,do_) << "\n";

live example