Klassendesign Problem



  • ich erstellen grade ein paar Strukturen welche belehrbar sind,
    dabei stosse ich immer wieder auf folgendes problem
    z.B.

    class MemoryCell
    {};
    
    class Adaptable_MemoryCell : public MemoryCell
    {};
    

    Der Sinn ist, das eine MemoryCell nur berechnet, und nicht belehrt werden muss.
    Das Problem tritt nun auf :

    class MemoryBlock
    {
    private :
    std::vector<MemoryCell> m_cells;
    };
    
    class Adaptable_MemoryBlock : public MemoryBlock
    {
    
    private :
    std::vector<Adaptable_MemoryCell> m_cells;
    };
    

    Wie mache ich es denn nun, das ich nicht 2 verschiedene vectoren habe?
    Beim schreiben ist mir eingefallen, das es mit virtual gehen würde,
    indem man Pointer in die Vectoren packt, und je nach klasse
    einmal mit baseclass, und das andere mal mit derived befüllt

    Aber gibts dafür auch andere Möglichkeiten?



  • Du willst Speicherzellen belehren? Viel Erfolg.

    Ich wuerde eine weitere (abstrakte) Basisklasse in Form eines Templates einfuehren, welche den eigentlichen Vektor haelt.

    template<typename T>
    class Whatever
    {
    protected:
      std::vector<T> m_cells;
    
    public:
      virtual ~Whatever();
    };
    
    class MemoryBlock: public Whatever<MemoryCell>
    {
    };
    
    class Adaptable_MemoryBlock : public Whatever<Adaptable_MemoryCell>
    {
    };
    


  • DeSoVoDaMu schrieb:

    Du willst Speicherzellen belehren? Viel Erfolg.

    Ich wuerde eine weitere (abstrakte) Basisklasse in Form eines Templates einfuehren, welche den eigentlichen Vektor haelt.

    template<typename T>
    class Whatever
    {
    protected:
      std::vector<T> m_cells;
    
    public:
      virtual ~Whatever();
    };
    
    class MemoryBlock: public Whatever<MemoryCell>
    {
    };
    
    class Adaptable_MemoryBlock : public Whatever<Adaptable_MemoryCell>
    {
    };
    

    ok, ich haue mich mal selbst, das ich darauf nicht gekommen bin ...
    Danke.

    Wegen den Speicherzellen :

    siehe LSTM : ftp://ftp.idsia.ch/pub/juergen/lstm.pdf


Log in to reply