为了避免代码重复,我试图将指向函数的指针作为静态方法的参数传递。
我有一个只有静态方法的类(Geo)。其中一种方法 (+++Geo::traceRay(+++)) 应该只显示(Geo::display(+++)) 一些东西,然后返回一个 int。
另一个类 (Las) 需要使用 Geo::traceRay(+++) 方法,但应该显示(Las::display(+++)) 其他东西。因此,我尝试将指向函数参数的指针传递给 Geo::traceRay(+++, pointer to function) 方法。指向的函数将正确的“display()”方法。
到目前为止,将第一个指针传递给 display() 不是问题,但我找不到如何处理第二个指针。
class Geo
{
public:
static bool display(int pix);
static int traceRay(int start, int end, bool (*func)(int) = &Geo::display); // no issue with this default parameter
};
class Las
{
public:
bool display(int pix);
void run();
};
int Geo::traceRay(int start, int end, bool (*func)(int))
{
for (int i = start; i < end ; ++i )
{
if((*func)(i)) return i;
}
return end;
}
bool Geo::display(int pix)
{
cout << pix*100 << endl;
return false;
}
bool Las::display(int pix)
{
cout << pix << endl;
if (pix == 6) return true;
return false;
}
void Las::run()
{
bool (Las::*myPointerToFunc)(int) = &display; // I can just use display as a non member class, but it should stay a member
Geo::traceRay(0,10, myPointerToFunc); // issue here!
}
int main()
{
Geo::traceRay(0,10); // use the "normal display" = the default one// OK
Las myLas;
myLas.run();
return 0;
}