微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

lambda 函数可以衰减到指向成员函数的指针吗?

如何解决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,它不能衰减到成员函数指针。

cppreference

,

Lambda 函数能否衰减为指向成员函数的指针?

简答:否。

Lambdas 只能转换为函数指针。并且成员函数指针不是函数指针(它们甚至不是指针)。

此外,只有非捕获 lambda 才能转换为函数指针。捕获 this 的 lambda 是捕获 lambda。

这样的东西可能有用 - 我不知道出于什么目的,但我能想到的最接近您的要求:

static constexpr auto member_lambda_func = [](const MyClass& self) {
    return self.x + 5;
};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。