将 Lambda 表达式转换为函数指针

Convert Lambda expression to function pointer

我用的是Visual-C++ 2013(不过这里好像没有这个标签)

我有一个结构

struct init_param{
    bool (*validation)(double**);
};

我想转换实例 model 的成员函数 ValidateParameters。所以我尝试使用 Lambda 表达式:

init_params params;
params.validation = [&model](double **par){return model.ValidateParameters(par); };

但是编译器说:

error C2440: '=': 'main::< lambda_d8b99bf9b28e45558a48b7e9148b3202>' can not be converted into 'bool (__cdecl *)(double **)'

如何进行? 或者更改 init_param 结构的最简单方法是什么,hte Lambda 表达式可以工作?

您可以将 validation 更改为 std::function 对象:

#include <functional>

struct init_param
{
    std::function<bool(double**)> validation;
};

带捕获的 lambda 不能转换为函数指针。您的 lambda 捕获 model.

C++ 标准部分 § 5.1.2 [expr.prim.lambda] :

The closure type for a non-generic lambda-expression with no lambda-capture has a public non-virtual non- explicit const conversion function to pointer to function with C ++ language linkage

您可以使用 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);
}