我有2點C++類的問題:傳遞一個類的成員函數作爲函數參數
的第一個問題是:我怎樣才能使這樣我就可以在另一個函數&傳遞類成員函數作爲參數我怎麼才能運行/調用該功能?我怎樣才能做到類靜態函數。它也許更容易被看這個代碼明白我的問題:
class DebuggingManager
{
string testLog;
bool test1()
{
// run test & return whether it passed or failed
}
static bool test2()
{
}
// How can I call a member function?
void catalogueTest(string testName, bool DebuggingManager::*nMemberFunction)
{
testLog += "Status of " + testName + ": " + ((*)nMemberFunction()) + "\n";
}
// How can I call a static function?
void catalogueTest(string testName, bool DebuggingManager::*nStaticFunction)
{
testLog += "Status of " + testName + ": " + DebuggingManager::nStaticFunction() + "\n";
}
// how do I pass a member function or a static function as a parameter in another function
bool runTests()
{
catalogueTest("Test of member functin", test1());
catalogueTest("Test of static functin", test2());
}
};
的第二個問題是:是否有不良(或危險)的做法調用類成員(或靜態)函數間接就像上面。我有一種感覺,這是非常糟糕的C++的做法?
編輯:實施意見 感謝您的答覆,我試圖實現他的意見,它的很多我的頭左右,雖然,這會是正確的嗎?
// I have a feeling that ParameterList is incorect, would I pass the implicit obj as a parameter or is it done automatically like in normal object function calls?
typedef bool (DebuggingManager::*MemberPointerType)(ParameterList);
void catalogueTest(tstring testName, DebuggingManager* obj, MemberPointerType *nMemberFunction)
{
debugLog += _T("Status of ") + testName + _T(": ") + (obj->*nMemberFunction)() + _T("\r\n");
}
void catalogueStaticTest(tstring testName, bool DebuggingManager::nStaticFunction)
{
debugLog += _T("Status of ") + testName + _T(": ") + nStaticFunction + _T("\r\n");
}
我很驚訝,這不是已經回答也許其他人是累過,不希望查找第500次成員函數指針的語法。 –
請參閱http:// stackoverflow。com/questions/2463112 /指向ac-class-member-function-as-a-global-functions-parameter的鏈接http://www.parashift.com/c++-faq-lite/pointers- to-members.html在聲明/使用普通和靜態成員函數指針時有注意的語法和注意事項。至於是否壞,我會說:可能不是在特定情況下(如測試或其他人),但作爲編寫代碼的日常練習並不是一件好事,因爲它很棘手,並且因爲對於大多數您可以使用它們的任何東西都有更好的機制。 – shelleybutterfly