allora, mi spiego meglio:
Ho visto in uno o due progetti open source di dimensioni puttosto grandi questo meccanismo per la serializzazione:
1)ogni classe a cui voglio applicare la serializzazione/deserializzazione deriva da un oggetto base CBaseObject per es.
2)ogni classe ha una funzione
3)durante il pre main(in un progetto è documentata cosi' la parte del programma che precede la funzione main) ogni classe registra l'indirizzo della propria funzione Create in una mappa con una chiave: L'RTTI.name() e valore puntatore a funzione con tipo di ritorno CBaseObjectcodice:CBaseObject CClasseX::Create() { return new CClasseX() }
ora , quando serializzo scrivo sul file un identificativo (il nome RTTI della classe) in modo che quando deserializzocodice:typedef CBaseObject * (*FactoryFunction)(InStream& stream); typedef std::map<std::string, FactoryFunction> FactoryMap;
1)leggo questo nome
2)estraggo la funzione che ha come chiave questo nome
3)lancio la funzione che mi ritorna l'oggetto non inizializzato ma del tipo corretto.
ma come fare questo se la classe è una classe template?
1)che tipo di ritorno generalizzato utilizzare per la funzione di creazione nella mappa di una classe template
2)come implementare la funzione create?
è un po shodan che mi viene in mente questo problema, probabilmente causato da un modello mentale che uso sbagliato per rappresentare i template:codice:template <class T> ??? CClasseX::Create() { return new CClasseX<T>() }
Il tipo generico è come se "legasse in qualche modo il template"(dall' inizializzazione della classe template in poi) da quando il tipo della classe template è concreto , le classi template mi appaiono diverse dalle classi normali (e probabilmente è giusto) ma non riesco a staccarmi dal concetto di classe base e derivazione,
e questa era una domanda : come vedi ereditare il template da una classe base che implementi varie funzionalità base?
vabbe forse sono andato un po OT.
si i dati del template sono serializzabili, mettiamo che ho un buffer di tipo intRisposta lunga: i dati del template sono serializzabili?
.codice:template<class T> CData<int> { T* m_data = new T[10]; }
.
grazie.

Rispondi quotando