ciao.
Sto utilizzando la libreria Code Synthesis http://www.codesynthesis.com/ , un xsd open source che genera classi c++ da un xsd e per farla breve fa tutto quello che fa l'xsd.exe di microsoft, solo che lo fa per il c++.
ora , vorrei creare un wrapper attorno a tutte le classi per avere una o piu funzioni membro oltre a quelle che gia ci sono, in questo caso la
void print().
sempre tramite command line posso instanziare il template in modo da generare questo codice per tutte le classi col tipo xsd generato base_XXX:codice:template < class T > class pippo : public T { public: pippo (const ::xercesc::DOMElement& e, ::xml_schema::flags f = 0, ::xml_schema::container* c = 0){}; pippo (const T& x, ::xml_schema::flags f = 0, ::xml_schema::container* c = 0){}; void print(){}; };
dove base_contact è il tipo generato dall xsd come classe c++.codice:typedef xml_schema::pippo<base_contact> contact;
Ora, farlo per tutte le classi è facile, perchè posso usare le espressioni reglari per instanziare tutte le classi che voglio e ho moltissime classi.
veniamo alle note dolenti: se genero ottengo:
Error 1 error C2512: 'contacts::base_contact' : no appropriate default constructor available c:\ifc\codesynthesis xsd 3.3\examples\cxx\tree\custom\contacts\ifc\contacts .hxx 213 contacts 1
quando si eredita non si ereditano anche i costruttori?
inoltre non posso permettermi di inserire in tutte le classi un costruttore di default, e poi perchè normalmente funziona senza il costruttore di default?
come posso risolvere?
grazie.

Rispondi quotando