我做了一个疯狂的项目,所以不要害怕我在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以便它正确执行?
答案 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";