我正在使用Visual-C ++ 2013(但这个标签似乎在这里不可用)。
我有一个结构
struct init_param{
bool (*validation)(double**);
};
我想要转换实例ValidateParameters
的成员函数model
。所以我尝试使用Lambda Expression:
init_params params;
params.validation = [&model](double **par){return model.ValidateParameters(par); };
但是编译器说:
错误C2440:'=':'main ::< lambda_d8b99bf9b28e45558a48b7e9148b3202>” 无法转换为'bool(__ cdecl *)(double **)'
如何进行?
或者更改init_param
结构的最简单方法是什么,使Lambda表达式可以工作?
答案 0 :(得分:2)
您可以将validation
更改为std :: function对象:
#include <functional>
struct init_param
{
std::function<bool(double**)> validation;
};
答案 1 :(得分:1)
带捕获的lambda无法转换为函数指针。你的lambda捕获model
。
C ++标准部分§5.1.2[expr.prim.lambda]:
非泛型lambda表达式的闭包类型,没有 lambda-capture 具有公共非虚拟非显式const转换 使用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);
}