c++类成员函数调用一个普通函数,而普通函数的一个形参是function模板函数,该普通函数在被调用时其函数参数是用的该类中的另一个成员函数。例如该类中的两个成员函数A、B,还有一个普通函数C,A调用C,C的一个形参是function模板函数,这时用的B函数作为该function模板函数的实参。
该普通函数的function模板函数形参具体写成 function<double (double*)> GoalFun,而实参用的是类的成员函数double xxx::B(double *para)。不知道是不是实际的函数与function模板函数形参不匹配?因为,形参给的是普通函数的形式,实参却是类的成员函数。能不能在不改function<double (double*)> 尖括号内的参数类型的情况下解决该问题?
我有现成的算法函数SA,SA在计算过程中要调用一个目标函数,在不同情况下,目标函数采用的公式不同,所以SA函数的一个形参为function<double (double*)> GoalFun,用以传递目标函数,之前的写法是目标函数以匿名函数的形式定义在调用SA函数的函数体中,而这次的情况是目标函数是一个类的成员函数,SA函数的function形参数据类型为function<double (double*)>,把类成员函数作为实参的话会出错。SA函数是以前已经做好的一个头文件中的函数,我想利用现有的代码,其实做一下代码移植,把SA函数写到类里面去,去掉function这个参数,以一般函数调用的方式调用类的其他成员函数就能解决问题。只是想能利用现有的头文件就尽量不去移植代码
使用std::bind
std::bind(&xxx::B,this, std::placeholders::_1, ....) //有一个参数要被外部传递xxx::B 类函数
this 类对象指针,也可以具体的对象指针,如xxx* px; 传px;
std::placeholders::_1 需要被传递的参数个数
另外可以在std::bind的时候额外传递参数
如:
double xxx::C(double *para, bool su);可以使用以下宏定义,出自cocos2dx
#define CC_CALLBACK_0(__selector__,__target__, ...) std::bind(&__selector__,__target__, ##__VA_ARGS__)用bind,我之前就想过,这样解决不了我的问题。因为我有现成的算法函数SA,而该函数在计算过程中要调用一个目标函数,不同的情况下,目标函数采用的公式不同,但目标函数的输入输出基本上都是目标参数序列传递进去,目标函数值返回回来
追答std::bind是可以在SA函数里传递的,用std::placeholders::_1,std::placeholders::_2。。。代替参数个数
追问的确是我对bind了解得还不全面,可以解决我的问题。谢谢你