我試圖將指針傳遞到一個成員函數的非成員函數,如以下例子:C++,傳遞一個成員指針到一個非成員函數
class Main
{
static void runMain (void (*progress)(double))
{
for (int i=1; i<=100; ++i)
{
// Do something
progress(i/100.0);
}
}
};
class A
{
void setProgress (double) {/*Do something else*/}
void runA()
{
Main::runMain (&setProgress); // Error: incompatible parameter from void(A::*)(double) to void(*)(double)
}
};
class B
{
void updateProgress (double) {/*More things to do*/}
void runB()
{
Main::runMain (&updateProgress); // The same error
}
};
這一結果與由於錯誤從A傳遞給Main的類型函數void(A :: *)(double)不匹配void(*)(double)。
如何在以下約束條件下傳遞成員函數:我不允許更改A類和B類的結構,除了runA和runB實現(但我可以更改包括其功能簽名的Main類) 。
謝謝!
使成員函數'static'。 –
成員函數在沒有用'this'調用時是否有效?函數如何知道哪些類數據可以運行? – mah
讓'Main :: runMain'接受['std :: function'](http://en.cppreference.com/w/cpp/utility/functional/function)。然後使用你最喜歡的方法傳遞函數+上下文。 – StoryTeller