簡體   English   中英

來自std :: bind的轉換函數

[英]Conversion function from std::bind

使用std::bind從另一個函數創建新函數並將其傳遞給另一個函數時,出現錯誤。

我的代碼看起來像

#include <functional>
using namespace std;
typedef double (*t_function)(double t, double *y);

double integrate_fmax(double s, bool(*t_max)(double t, double *y), void(*fce_min)(double s, double &t_0, double *y_0), t_function fce_max, double err, t_function *f_diff, int dim){...}

void get_x1_x2(double &x1, double &x2, double(*fce)(double x), double mlt){...}

double shoot_meth(double s1, double mlt, bool(*t_max)(double t, double *y), void(*fce_min)(double s, double &t_0, double *y_0), t_function fce_max, double err, t_function *f_diff, int dim){
    double s2;  
    auto fce_x = bind(integrate_fmax, placeholders::_1, t_max, fce_min, fce_max, err, f_diff, dim);
    get_x1_x2(s1, s2, fce_x, mlt);
}

我嘗試將函數fce_x傳遞給get_x1_x2時收到錯誤get_x1_x2

C2664: 'void get_x1_x2(double &,double &,double (__cdecl *)(double),double)' : cannot convert argument 3 from 'std::_Bind<true,double,double (__cdecl *const )(double,bool (__cdecl *)(double,double *),void (__cdecl *)(double,double &,double *),t_function,double,t_function *,int),std::_Ph<1> &,bool (__cdecl *&)(double,double *),void (__cdecl *&)(double,double &,double *),double (__cdecl *&)(double,double *),double &,t_function *&,int &>' to 'double (__cdecl *)(double)'

但是,當我嘗試使用double foo = fce_x(5)沒有任何錯誤。

我正在使用Microsoft Visual Studio 2013。

PS對不起,函數很丑,但是我不確定錯誤在哪里,簡化會有所幫助。

std::bind不返回函數指針。 您需要使用std::function代替。 這是因為std::bind僅保證返回可以存儲在std::function 如果您更換

double(*fce)(double x)

std::function<double(double)> fce

它應該正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM