Übergeben einer Klasse member-Funktion als Funktion der parameter

Ich habe 2 C++ - Klassen-Fragen:

Die 1. Frage ist: Wie kann ich es machen, damit ich Vorbeigehen kann, ein Klasse member-Funktion als parameter in eine andere Funktion, die & wie kann ich dann/rufe diese Funktion? Und wie kann ich das gleiche tun mit einer Klasse statische Funktion. Es vielleicht leichter zu verstehen, meine Frage mit Blick auf diese code:

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() );
    }

};

Die 2. Frage ist: Ist es schlimm(oder gefährlich) Praxis zu nennen, ein Schüler (oder statische) Funktion indirekt wie oben. Ich habe das Gefühl, das ist wirklich eine schlechte C++ - Praxis?

BEARBEITEN: Durchführung von Beratung
Danke für die Antwort, habe ich versucht zu implementieren, die Beratung, seine eine Menge in meinen Kopf zu kriegen, würde dies korrekt sein?

    //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");
    }
  • Ich bin überrascht, dass dies nicht bereits beantwortet. Vielleicht jeder andere ist müde und will nicht, um die syntax für die Funktion Zeiger für den 500sten mal.
  • siehe stackoverflow.com/questions/2463112/... gibt einen link zu parashift.com/c++-faq-lite/pointers-to-members.html die die syntax und die Dinge zu achten, wenn die Deklaration/Verwendung von normal-und statische member-Funktion-Zeiger. Als ob es schlecht würde ich sagen: wahrscheinlich nicht in einem bestimmten Fall (wie testen, oder vielleicht andere), aber es wäre nicht gut zu tun, wie ein Tag-zu-Tag Praxis für das schreiben von code, da es schwierig ist, und da gibt es bessere Mechanismen, die für die meisten alles, was Sie würden Sie für den Einsatz.
InformationsquelleAutor user593747 | 2011-08-28
Schreibe einen Kommentar