Unbekannter Rückgabewert in Interface-Klasse



  • Sinn?

    Was willst du mit dem Interface erreichen, wenn man wissen muss, welche Abgeleitete Klasse da instantiirt ist?

    Der Sinn von polymorphismus/interfaces ist doch, dass du die Interfaces benutzen kannst ohne die genaue Klasse zu kennen, die da instantiiert ist ...

    Warum gehen keine Templates?


  • Mod

    Das ist wahrscheinlich nur mein Problem, aber was ist an deinem Typen "Internal", wenn du einen öffentlichen Zugriff darauf erlaubst?



  • PyradmieAusÄgypten schrieb:

    Wie wärs, wenn alle Rückgabetypen(klassen?) von einer Basisklasse ableiten?

    Das will ich eigentlich vermeiden, weil die Rückgabetypen aus einer Lib kommen.

    darthdespotism schrieb:

    Sinn?
    [...]
    Warum gehen keine Templates?

    Bei einem Template muss ich ja den genauen Typ angeben oder?



  • camper schrieb:

    Das ist wahrscheinlich nur mein Problem, aber was ist an deinem Typen "Internal", wenn du einen öffentlichen Zugriff darauf erlaubst?

    Der interne Typ ist der Datentyp, den die externen Lib-Funktionen benötigen.


  • Mod

    Lemmy schrieb:

    camper schrieb:

    Das ist wahrscheinlich nur mein Problem, aber was ist an deinem Typen "Internal", wenn du einen öffentlichen Zugriff darauf erlaubst?

    Der interne Typ ist der Datentyp, den die externen Lib-Funktionen benötigen.

    Könntest du ein Beispiel geben, wie das benutzt werden soll?



  • camper schrieb:

    Könntest du ein Beispiel geben, wie das benutzt werden soll?

    class Matrix
    {
    public:
      virtual UnknownMatrixType* getInternalType() = 0;
    }
    
    class LaMatrix : public Matrix
    {
    private:
      LaGenMatDouble *internal_type_;
    
    public:
      virtual LaGenMatDouble* getInternalType()
    }
    
    class LaVector : public Matrix
    {
    private:
      LaVectorDouble *internal_type_;
    
    public:
      virtual LaVectorDouble* getInternalType()
    }
    

    LaGenMatDouble und LaVectorDouble sind Lib-Klassen.

    Und dann gibt es zB irgendwo folgende Methode:

    void getMultiplication(Matrix& A, Matrix& B)
    {
      libFunction(A->getInternalType, B->getInternalType);
    }
    

    Und je nachdem, ob es sich um einen Vektor oder eine Matrix handelt, sollte auch der interne Typ an libFunction übergeben werden.


  • Mod

    Dann brauchst du Kovarianz gar nicht. Gibt einfach in allen Klassen ein UnknownType* zurück.



  • camper schrieb:

    Dann brauchst du Kovarianz gar nicht. Gibt einfach in allen Klassen ein UnknownType* zurück.

    Hm. UnknownType* hab i da jetzt nur so hingeschrieben, weil ich nicht weiß, was ich da als return-Wert zurückliefern soll. Also genau hier liegt mein Problem. Also die Klasse *UnknownType gibts gar nicht. Und irgendwas muss ich aber in der Basisklasse auch als Return-Wert zurückgeben, nur was?!


  • Mod

    UnknownType* ist ja nichts weiter als der Typ von
    A->getInternalType() bzw. B->getInternalType() in

    libFunction(A->getInternalType(), B->getInternalType());
    

    und richtet sich demzufolge nach dem Typen, den die Funktion verlangt.



  • camper schrieb:

    UnknownType* ist ja nichts weiter als der Typ von
    A->getInternalType() bzw. B->getInternalType() in

    libFunction(A->getInternalType(), B->getInternalType());
    

    und richtet sich demzufolge nach dem Typen, den die Funktion verlangt.

    Ja, aber hier kann sowohl
    - LaVectorDouble
    - LaGenMatDouble
    an die Lib-Funktion übergeben werden, d.h. ich hab 2 verschiedene Typen, wo ich aber nicht vorher nicht weiß, welcher wirklich daher kommt. Das sollte dann dynamisch eingesetzt werden.


Anmelden zum Antworten