Adresse von überladener Funktion



  • Ich experimentiere gerade ein wenig, und da wollte ich die Adresse einer überladenen Memberfunktion ermitteln und dann mit bind verwenden. Die Lösung hierzu ist weniger offensichtlich, als ich gehofft hatte - konkret scheint das ein Loch im Standard zu sein oder so? Funktioniert das auch mit anderen Compilern als Visual C++?

    int Func( int i, int j );
    int Func( long l );
    
    ...
    
    // &Func geht ja nicht ohne weiteres...
    int (*pFunc) ( int, int ) = Func;
    

    MfG



  • Casten?

    int (*pFunc) ( int, int ) = static_cast <int (*) (int, int)> (&Func);
    

    Am besten mit typedef für die Funktion.



  • Don06 schrieb:

    Casten?

    int (*pFunc) ( int, int ) = static_cast <int (*) (int, int)> (&Func);
    

    Am besten mit typedef für die Funktion.

    Richtig. Mit casten geht das, allerdings finde ich diese Variante ziemlich unelegant - im Gegensatz zu vielen anderen Konstrukten 😃 Ich hatte gehofft, dass man die Adresse mit Hilfe der Signatur bekommen könnte, aber wenn es nur so geht...

    EDITEDIT: Got what I want...

    // So gehts auch ohne cast, ist aber auch nur ein Beispiel von vielen...
    bind1st(mem_fun<wostream &, wostream, int>(&(wostream::operator<<)), &wcout)(7);
    

    Vielen Dank


Anmelden zum Antworten