从标准::绑定的转换函数
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
时,我收到错误:
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。
附言很抱歉功能丑陋,但我不确定错误在哪里,简化会有所帮助。
std::bind
不返回函数指针。您需要改用std::function
。这是因为std::bind
只能保证返回可以存储在std::function
中的东西。如果替换
double(*fce)(double x)
跟
std::function<double(double)> fce
它应该正常工作。
相关文章:
- 转换函数,将 std::数组的双精度作为参数或双精度作为参数单独转换
- C++:用户定义的显式类型转换函数错误
- 为什么下面带有非常量转换函数的代码没有歧义?
- 为什么转换函数声明不需要至少一个定义类型说明符
- PCL:当我在setConditionFunction中使用std::bind 时,没有合适的转换函数
- C++ 通过自定义赋值运算符隐式转换函数参数
- 当我使用 void 函数的返回值(通过强制转换函数指针)时,究竟会发生什么?
- 在C++中自动向下转换函数参数
- static_cast:转换函数模板——它们真的有效吗
- 通过像printf这样的可变参数函数传递一个带有常量字符*转换函数的类
- 隐式转换函数的返回对象时是否会影响性能?
- C++不存在合适的转换函数
- 为什么允许 int 和 const int 使用不同的转换函数?
- 使用转换函数直接初始化
- 为什么用户定义的转换函数模板不能有推导的返回类型?
- 为什么我会收到转换函数错误
- 选择用于赋值初始化的转换函数的优先级
- 我收到错误:没有合适的转换函数从 std::basic_istream<char、std::char_traits<char>> 到 char 存在
- 具有转换函数的 lambda,指向具有 C++ 链接的函数的指针
- 使用模板和部分专用化生成类型转换函数