如何解决lambda 函数可以衰减到指向成员函数的指针吗?
在我的理解中,Lambda 的行为应该与函数类似,甚至可以扩展它们的功能。
因此,无捕获的 lambda 可以衰减为函数指针:
auto x = +[] (int x) {return x + 5;} // + triggers conversion to function pointer.
但是,我还没有找到一种方法来使 lambda 函数的行为类似于成员函数。
例如,以下代码段不起作用:
class MyClass() {
int x;
static constexpr auto member_lambda_func = [this] () {return x + 5;}; //Does not compile. Cannot capture this.
};
此外,您甚至无法创建一个将 this
衰减为指向成员函数的指针的 lambda。
是否有制作 lambda 成员函数的解决方法? 还是有充分的理由不这样做?
解决方法
如果 Lambda 是不可捕获的,它们可以衰减为函数指针,但如果它们捕获某些东西,它们就不能衰减为任何东西。特别是,如果它只捕获 this
,它不能衰减到成员函数指针。
Lambda 函数能否衰减为指向成员函数的指针?
简答:否。
Lambdas 只能转换为函数指针。并且成员函数指针不是函数指针(它们甚至不是指针)。
此外,只有非捕获 lambda 才能转换为函数指针。捕获 this
的 lambda 是捕获 lambda。
这样的东西可能有用 - 我不知道出于什么目的,但我能想到的最接近您的要求:
static constexpr auto member_lambda_func = [](const MyClass& self) {
return self.x + 5;
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。