Eigene Klasse serialisieren

Nob

Mitglied
Hallo Zusammen

Stehe da vor einem kleineren Problem und hoffe, dass mir jemand einen Tipp geben kann.

Ich möchte eine Klassse ("CTestClass") serialisieren.

Code:
class CTestClass : public CObject
{
	DECLARE_SERIAL(CTestClass)
public:
	CTestClass(void);
	~CTestClass(void);
	CString s;
	void Serialize(CArchive& archive);

};

Code:
#include "TestClass.h"


IMPLEMENT_SERIAL(CTestClass, CObject, 1)


CTestClass::CTestClass(void)
{
}

CTestClass::~CTestClass(void)
{
}

void CTestClass::Serialize( CArchive& archive )
{
    CObject::Serialize( archive );

    if( archive.IsStoring() )
        archive << s;
    else
        archive >> s;
}


Serialisiert wird sie wie folgt:

Code:
	CFile f;

	// serialize it
	if( f.Open("test.txt" , CFile::modeCreate | CFile::modeWrite ) )
	{
		CArchive ar(&f,CArchive::store);
		ListOfTestClasses.Serialize(ar);		// CPtrArray
		ar.Close();
		f.Close();
	}

ListOfTestClasses ist eine CPtrArray. Wenn ich jedes Objekt einzeln serialisiere, funktioniert es ohne Probleme.
Beispiel:
Code:
for(int i = 0; i< count; i++)
{
	c = (CTestClass*)ListOfTestClasses.GetAt(i);
	c->Serialize(ar);
}
Der Sinn der Sache ist jedoch, dass ich keinen loop um alle Objekte machen muss um sie zu serialisieren.

Was mache ich falsch, resp. was verstehe ich da nicht ganz?

Danke für eure Hilfe
 
Hi,

Ähhm..

Also:
Verstehe nicht ganz wie das ganze Funktioniert oder was es bringen soll aber:
Ich sehe das du eien Liste in der Klasse hast die du speichern willst.
einafch so eine Liste speichern, erst recht wenn sie Dynamisch ist geht nicht, denn
woher soll die Funktion wissen wie viele Elemente die Liste hat?

Meißtens liegts an sowas.

Gruß
Anfänger

PS:
Kanst du mal genau erklären was das ganze macht bzw. bringt?
Würd mich mal interessieren :p
 
Zum Sinn des ganzen: Wenn man zb den Zustand eines Objektes abspeichern will, muss man das ganze ja in eine Form bringen, die man in eine Datei schreiben kann oder sonst irgendwas
Am praktischten ist (meiner Meinung nach) ein char-Array, das die Klasse dir auf Befehl liefern kann, in dem alle Werte der Members etc gespeichert sind

Und dazu einen Konstruktor, der mit so einem Array wieder das Objekt so herrichtet, wie es beim Speichern war, ohne das man sich lange um die einzelnen Members kümmern muss
 
Ha super, aus lauter Verzweiflung und vor lauter probieren...
Wenn man das CPtrArray durch ein CObArray ersetzt funktioniert es :)

Vielen Dank für eure Hilfe!
 

Neue Beiträge

Zurück