爲了避免代碼重複,我打算將指針指向函數作爲靜態方法的參數。作爲參數的方法指針
我有一個只有靜態方法的類(地理)。其中一種方法(+++ Geo :: traceRay(+++))應該只顯示(Geo :: display(+++))幾件事情,然後返回一個int。另一個類(拉斯維加斯)需要使用Geo :: traceRay(+++)方法,但是應該顯示其他的(Las :: display(+++))。 所以我嘗試將函數參數的指針傳遞給Geo :: traceRay(+++,指向函數的指針)方法。指向的函數將會右鍵「顯示()」方法。
到目前爲止,將第一個指針傳遞給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;
}
非常感謝這個答案。我不知道'std :: function'和'std :: bind'。我需要[鏈接](http://latedev.wordpress.com/2012/08/06/using-stdbind-for-fun-and-profit/)瞭解它是如何工作的,但現在我已經完全符合我的要求。另外,要從Las類調用Geo :: traceRay,必須使用Geo :: traceRay(0,10,std :: bind(&Las :: display,this,std :: placeholders :: _ 1));' – n3squik
@ n3squik,哦,對不起。那麼我會更新我的答案。 – chris