C++ 将Lambda表达式转换为函数指针
我正在使用Visual C++2013(但此处似乎没有此标记) 我有一个结构C++ 将Lambda表达式转换为函数指针,c++,visual-c++,c++11,visual-studio-2013,lambda,C++,Visual C++,C++11,Visual Studio 2013,Lambda,我正在使用Visual C++2013(但此处似乎没有此标记) 我有一个结构 struct init_param{ bool (*validation)(double**); }; 我想强制转换实例model的成员函数ValidateParameters。所以我尝试使用Lambda表达式: init_params params; params.validation = [&model](double **par){return model.ValidateParameters(
struct init_param{
bool (*validation)(double**);
};
我想强制转换实例model
的成员函数ValidateParameters
。所以我尝试使用Lambda表达式:
init_params params;
params.validation = [&model](double **par){return model.ValidateParameters(par); };
但编译器说:
错误C2440:“=”:“main::或者,更改Lambda表达式工作的
init_param
结构的最简单方法是什么?您可能只需将验证更改为std::function对象:
#include <functional>
struct init_param
{
std::function<bool(double**)> validation;
};
#包括
结构初始化参数
{
功能验证;
};
带有捕获的lambda无法转换为函数指针。您的lambda捕获型号
C++标准第§5.1.2节[expr.prim.lambda]:
非泛型lambda表达式的闭包类型,没有
lambda capture具有公共的非虚拟非显式常量转换
函数到带有C++语言链接的函数指针
您可以改用std::function
:
using namespace std::placeholders;
struct init_params{
std::function<bool(double**)> validation;
};
struct modelType
{
bool ValidateParameters(double** par) { return false; }
};
int main () {
init_params params;
modelType model;
params.validation = std::bind(&modelType::ValidateParameters, &model, _1);
}
使用名称空间std::占位符;
结构初始化参数{
功能验证;
};
结构模型类型
{
bool ValidateParameters(双**par){return false;}
};
int main(){
初始参数;
模型类型模型;
params.validation=std::bind(&modelType::ValidateParameters,&model,_1);
}
使用std::bind
代替普通Lambda表达式有哪些优点?为什么不使用std::bind1st
?@quantdev您可以使用lambda。不能使用函数指针。std::bind是c++11,这使得std::bind1st和类似的东西几乎毫无用处。这里并没有真正的优势,只是因为lambda捕获了函数指针,所以不能使用函数指针model@T.C.评论改写,谢谢