Abstrakter Rückgabetyp



  • Hi,

    irgendwie stehe ich auf dem Schlauch. Vermutlich ist mein Design nicht besonders gelungen:

    Es sollen mehrere Algorithmen implementiert werden,
    die verschiedene arten von Keys benutzen.

    Die Klasse Key ist abstrakt.

    class Key
    	{
    	public:
    		virtual ~Key() =0;
    	};
    

    Jetzt will aber eine andere Klasse Algo Key als Rückgabetyp einer Methode benutzen:

    class Algo : public Encrypt, Decrypt
    	{
    	public:
    		virtual Key generateKey()=0;
    		virtual ~Algo()=0;
    	};
    

    Tja leider darf von Key aber keine Instanz gebildet werden, der
    Compiler wirft die entsprechende Fehlermeldung. 😞

    Ausserdem: Sicherlich gibt es einen Ersatz für virtuelle template Methoden. Wie kann man sowas machen?



  • Du kannst halt nicht by Value zurückgeben, weil es per Definition (die Klasse ist ja abstrakt) keine Instanz davon geben kann. Du kannst also einen Zeiger darauf zurückgeben. Um keine Probleme mit Speicherlöchern zu bekommen würde ich einen smart-pointer empfehlen. boost::shared_ptr ist sehr geeignet. Wenn Du mit Bordmitteln auskommen willst geht hier auch std::auto_ptr. Wenn Du das tun willst informiere Dich aber zunächst gründlich über die Verwendung von auto_ptr insbesondere die Kopiersemantik um böse Überraschungen zu vermeiden.

    MfG Jester



  • Ach... Java hat spuren hinterlassen 😞

    Danke Jester!


Anmelden zum Antworten