c++类成员函数调用一个普通函数,而普通函数的一个形参是function模板函数
c++类成员函数调用一个普通函数,而普通函数的一个形参是function模板函数,该普通函数在被调用时其函数参数是用的该类中的另一个成员函数。例如该类中的两个成员函数A、...
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这个参数,以一般函数调用的方式调用类的其他成员函数就能解决问题。只是想能利用现有的头文件就尽量不去移植代码 展开
该普通函数的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);
std::bind(&xxx::C,this, std::placeholders::_1, true) // 外部传一个参数,这里额外传一个参数
std::bind(&xxx::C,this, std::placeholders::_2) // 外部传二个参数,就不能额外传参数了
可以使用以下宏定义,出自cocos2dx
#define CC_CALLBACK_0(__selector__,__target__, ...) std::bind(&__selector__,__target__, ##__VA_ARGS__)
#define CC_CALLBACK_1(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, ##__VA_ARGS__)
#define CC_CALLBACK_2(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, std::placeholders::_2, ##__VA_ARGS__)
#define CC_CALLBACK_3(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, ##__VA_ARGS__)
更多追问追答
追问
用bind,我之前就想过,这样解决不了我的问题。因为我有现成的算法函数SA,而该函数在计算过程中要调用一个目标函数,不同的情况下,目标函数采用的公式不同,但目标函数的输入输出基本上都是目标参数序列传递进去,目标函数值返回回来
追答
std::bind是可以在SA函数里传递的,用std::placeholders::_1,std::placeholders::_2。。。代替参数个数
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询