Funktoren auf Methoden von Basisklassen



  • Hallo,

    ich habe folgendes Problem:

    In einem Modul sollen Objekte einer API verwendet werden. Da Module über ein Skript steuerbar sein sollen, sollen Methoden dieser externen Objekte in Funktoren gekapselt werden. Das ergibt folgende Situation:

    class ExternesObjekt_Basis_Basis {
    public:
    void getParameter0( int i );
    };

    class ExternesObjekt_Basis {
    public:
    void getParameter1( int i );
    };

    class ExternesObjekt : public ExternesObjekt_Basis {
    };

    class Modul : API_fuer_Funktoren {
    private:
    ExternesObjekt ext;
    public:
    Modul()
    {
    registerEigenschaft( new AccessFunctor<ExternesObjekt,int>( "getParameter", this->ext, &ExternesObjekt::getParameter1 );
    ...
    }
    };

    Die API_fuer_Funktoren und der AccessFunctor ermöglichen dabei den Zugriff auf die registrierten Methoden über eine einheitliche Schnittstelle.
    Das ist sehr schön, so lange ich nur für Methoden aus ExternesObjekt oder ExternesObjekt_Basis Funktoren definiere. Beim Versuch einen entsprechenden Funktor für getParameter0 zu definieren, ist die Konvertierung des Methoden-Pointer nicht möglich, in etwa:
    von "__thiscall ExternesObjekt_Basis_Basis::" kann nicht nach "__thiscall Externes_Objekt::" konvertiert werden.
    Das mag sogar sinnvoll sein.
    Ich kann das Problem umgehen, indem die Methode in Modul gekapselt wird oder indem der Funktor über die Basis-Klasse definiert wird, aber:
    Gibt es eine Möglichkeit analog zum constructor oben einen Funktor unter der Verwendung von ExternesObjekt zu definieren?

    Hilfe wäre klasse!

    Peter


Anmelden zum Antworten