今天整代码,为了减少代码冗余,新定义了一个带函数指针形参的成员函数,然后将几处代码改为调用这个成员函数,一编译就出错了:cannot convert parameter 1 from 'struct GradientVector (const struct GradientVector &,int)' to 'struct GradientVector (__cdecl *)(const struct GradientVector &,int)'
上网查了下,才想起用C++类成员函数做函数指针参数时,与普通函数有点不同,成员函数带有默认this指针,不能作为这里的回调函数用。
解决:
(1) 改为static 成员函数,但是这样就不能访问非static成员; 若是再设一个类类型指针做形参,调用时传this指针进去解决,也很不方便。
(2) 改为友元,
(3)加类限定符:
class npGvfSnake{
ForceVector ForceNormalized(ForceVector (npGvfSnake::*fp)(const SnakeNode&, int), int NodeIndex)
{
(this->*fp)(...);
...
};
}
调用 ForceNormalized(this->function,...);
类的成员函数的编译模式和普通成员的编译模式不一样,
一个是thiscall,一个是__cdecl