C++11 在lambda中使用成员变量时,将lambda分配给函数指针

C++11 在lambda中使用成员变量时,将lambda分配给函数指针,c++11,lambda,C++11,Lambda,我使用函数指针作为模板函数的参数,模板函数将其用作函子。但是,如果我通过调用类的成员变量来定义lambda,编译器会抱怨我是否要将其分配给函数指针 如果函数指针使用成员变量,如何将lambda分配给它 注意:没有可执行的用户定义的转换运算符 无法调用此转换或运算符 函数不包含任何数据,因此不需要存储,只需要指向函数所在地址的指针。由于函数指针只是指向函数,因此没有存储参数的lambda可以转换为函数指针 如果lambda对象是函数指针和存储的数据,则数据必须存储在某个位置。函数指针不能指向数据和

我使用函数指针作为模板函数的参数,模板函数将其用作函子。但是,如果我通过调用类的成员变量来定义lambda,编译器会抱怨我是否要将其分配给函数指针

如果函数指针使用成员变量,如何将lambda分配给它

注意:没有可执行的用户定义的转换运算符 无法调用此转换或运算符


函数不包含任何数据,因此不需要存储,只需要指向函数所在地址的指针。由于函数指针只是指向函数,因此没有存储参数的lambda可以转换为函数指针


如果lambda对象是函数指针和存储的数据,则数据必须存储在某个位置。函数指针不能指向数据和函数。因此,根本不可能将带有捕获数据的lambda函数转换为函数指针。

函数不包含任何数据,因此不需要存储,只需要指向函数所在地址的指针。由于函数指针只是指向函数,因此没有存储参数的lambda可以转换为函数指针


如果lambda对象是函数指针和存储的数据,则数据必须存储在某个位置。函数指针不能指向数据和函数。因此,根本不可能将带有捕获数据的lambda函数转换为函数指针。

是的,只有完全没有捕获的无状态lambda才能强制转换为函数指针。如果需要捕获此(或任何其他内容),则需要更改目标函数proto,使其成为模板:

template<class F> int f(F &&f);
或任何其他函数对象包装器


(我已将参数类型从
std::function
中的const ref更改为
int
,因为将const lvalue refs绑定到标量类型通常几乎没有意义。)

是的,只有无状态lambda(完全没有捕获)可以强制到函数指针。如果需要捕获此(或任何其他内容),则需要更改目标函数proto,使其成为模板:

template<class F> int f(F &&f);
或任何其他函数对象包装器


(我已经将参数类型从
std::function
中的const ref更改为
int
,因为将const lvalue refs绑定到标量类型通常毫无意义。)

很遗憾,所以我使用了一个经典的类functor:/@dgrat如何将functor分配给函数指针?lambda或多或少是手动函子定义的语法糖。我的意思是,我没有将函数指针作为模板参数传递,而是决定传递函子。@dgrat我仍然会使用lambda。它更简洁,IMHO抓住了作为一个函数而不是一个函子的意图。我认为它也更符合当前的编码惯例。@Jens你说的“函子”是什么意思?很遗憾,所以我使用了一个经典的类函子:/@dgrat你怎么能把函子分配给函数指针?lambda或多或少是手动函子定义的语法糖。我的意思是,我没有将函数指针作为模板参数传递,而是决定传递函子。@dgrat我仍然会使用lambda。它更简洁,IMHO抓住了作为一个函数而不是一个函子的意图。我认为它也更符合当前的编码惯例。@Jens你说的“函子”是什么意思?
int f(std::function<bool(int)> const &f);