CStringList erweitern



  • Guten Morgen !

    Ich habe folgendes vor: Ich möchte die Klasse CStringList so erweitern, dass ich neben dem String auch noch ein Flag in der Liste speichern kann ( aktiv / nicht aktiv ).

    Was ich bisher gemacht habe:

    - Eigene Klasse von CStringList abgelitten.
    - Struktur CNode überschrieben und um eine BOOLsche Variable erweitert
    - Funktionen geschrieben, die die Variable setzen sollen:

    void MyClass::SetActive (POSITION position, BOOL active)
    {
    	if (position != NULL)
    	{
    		CNode* pNode = (CNode*) position;
    		pNode->bActive = active;	
    	}
    }
    
    BOOL MyClass::IsActive (POSITION position)
    {
    	if (position != NULL)
    	{
    		CNode* pNode = (CNode*) position;
    		return pNode->bActive;	
    	}
    	return FALSE;
    }
    

    Mein Problem ist jetzt: ich kann die Variablen setzen, aber wenn ich in der IsActive-Funktion auf den pNode zugreife, steht in bActive nur Müll drin. Liegt das daran, dass dieser Teil der Struktur irgendwie überschieben wird?

    Habe ich überhaupt den richtigen Ansatz, oder ist mein ganzes Vorhaben unsinnig bzw. schwer zu realisieren. !?

    Wer kann mir da weiterhelfen? Ich wäre echt dankbar für Denkanstösse 🙄

    Christian



  • meine Klasse sieht bisher übrigens so aus:

    class MyClass: public CStringList
    {
    
    public:
    	MyClass(void);
    	~MyClass(void);
    	void SetActive (POSITION position, BOOL active);
    	BOOL IsActive (POSITION position);
    protected:
    	struct CNode
    	{
    		CNode* pNext;
    		CNode* pPrev;
    		CString data;
    		BOOL bActive;
    	};
    };
    

    Danke schonmal !



  • Gibts denn da keine Meinungen oder Ideen zu?

    Hab ich das völlig falsch angepackt oder geht es nicht so wie ich mir das wünsche?

    😞



  • Die Ganzen Container der MFC sind eigentlich veraltet.
    Nimm lieber ne klasse, in der dann ein CString und ein bool
    als Membervariablen existieren, und pack sie in einen
    std::vector oder in eine std::list.

    Devil



  • Danke Devil !

    Dann werde ich das Ganze mal anders aufzäumen 🤡



  • Am einfachsten wäre es wohl, gleich einen eigenen Listentyp zu schreiben. D.h. eine Klasse MyNode, in der dann der CString und das bool-flag enthalten sind, sowie zwei Zeiger (vorhergehender Knoten, nachfolgender Knoten). Und dann eben eine Klasse MyList, bei der Du dann die ganzen üblichen Funktionen selbst schreibst, wie z.B. AppendNode(MyNode), RemoveNode(), RemoveNodeAt(POSITION) usw.

    Dann kannst Du zumindest sicher sein, dass Du keine Altlasten aus der Implementierung der Basisklasse mit übernommen hast (wie z.B. bei CStringList oder std::list).



  • Lynix schrieb:

    Am einfachsten wäre es wohl, gleich einen eigenen Listentyp zu schreiben. D.h. eine Klasse MyNode, in der dann der CString und das bool-flag enthalten sind, sowie zwei Zeiger (vorhergehender Knoten, nachfolgender Knoten). Und dann eben eine Klasse MyList, bei der Du dann die ganzen üblichen Funktionen selbst schreibst, wie z.B. AppendNode(MyNode), RemoveNode(), RemoveNodeAt(POSITION) usw.

    Dann kannst Du zumindest sicher sein, dass Du keine Altlasten aus der Implementierung der Basisklasse mit übernommen hast (wie z.B. bei CStringList oder std::list).

    Besser als std::list wird man es selber wohl nicht hinbekommen,
    ausserdem währe dies bedeutend mehrarbeit. Dafür gibts schliesslich
    die STL, das sie einem die Arbeit abnimmt.

    Devil


Anmelden zum Antworten