Tabellen 'verwaltung', Template



  • Hallo erstmal.

    Ich schreibe gerade an etwas, was ein Steuerelement erweitern soll.
    Ich möchte das ich für jede Zelle einer Tabelle auf ein beliebiges
    Datenelement zu greifen kann.

    Erstmal kurz zu Datenstruktur wie ich sie bisher habe:

    Die Klasse Column stellt eigentlich nur eine Zelle da,
    dort soll später evtl. auch der Datentyp rein.

    class Column  
    {
    
    	CString titel;//wegen MFC, sonst könnte man es gegen string tauschen
    	bool is_check,check;
    	char style;
    	int image,width;
    public:
    	int GetWidth()const;
    	void SetWidth(int Width);
    	int GetImage()const;
    	char GetStyle()const;
    	bool IsCheckBox()const;
    	bool GetCheck()const;
    	CString GetTitel()const;
    	void SetImage(UINT image);
    	void SetStyle(char c);
    	void SetCheckBox(bool b);
    	void SetCheck(bool b);
    	void SetTitel(CString Titel);
    	Column();
    	Column(const Column & copy);
    	Column(CString titel,int width,char style=LB_TEXT,int image=-1, bool is_check=false,bool check=false);
    	virtual ~Column();
    };
    

    Ich hab dran gedacht der Klasse noch ein nested Template zu geben, um
    den Datentyp speichern zu können, da es ja nicht möglich ist eine Template
    Variable anzulegen (template<typename T> T; ), und in diesem Template den
    Datentypen zu speichern, und auch dort dann die Daten zu halten.

    Die Klasse Row soll das ganze dann in eine Zeile verwandeln, sie
    enthält für diesen Zweck einen vector<Column>.

    class Row  
    {
    	vector<Column> row;
    public:
    	void SetColumn(Column column);
    	Column &GetColumn(int column);
    	vector<Column> GetRow()const;
    	Row();
    	Row(const Row &copy);
    	virtual ~Row();
    
    };
    

    Das Template in Column könnte eigentlich nur
    eine Typ Variable und eine Get und SetFunktion enthalten.
    So stell ich mir dies vor.

    Jetzt meine Frage, gibts ne elegantere Lösung ?
    Hab ich irgendwo n designfehler drin ?
    Was haltet ihr von dem Ansatz?

    Devil



  • Hm, also bin jetzt was weiter:

    Die Klasse Column wird zu einem Template, da sie ja schon
    eine Zelle repräsentiert, kann sie auch direkt den Datentyp dafür
    halten. Von daher fällt dann auch das Nested Template weg.

    Devil



  • wenn Column eine Zelle ist, wieso heißt Column dann nicht auch so?



  • davie schrieb:

    wenn Column eine Zelle ist, wieso heißt Column dann nicht auch so?

    Nein, Column stellt eine Spalte, und gleichzeitig auch die darin enthalten Zellen dar.
    ein vector<Column<T> > enthält dann alle zellen der spalte.
    Mein Problem ist jetzt noch, wie kann ich ein vector< vector<Column<T> > > realisieren,
    in den ich dann praktisch mit Push_back Column objekte einfüge,
    Der Äußere Vector wäre dann die gesamte tabelle, der innere würde jeweils
    die Spalten enthalten.

    Devil


Anmelden zum Antworten