auf welchen typ zeigt der pointer?



  • Mein Problem ist Folgendes:

    ich möchte Framework anbieten, mit dessen Hilfe Datenklassen vollautomatisch in XML serialisiert werden können, ohne das der Nutzer des Frameworks etwas von der Serialisierung wissen muss. Der Nutzer muss lediglich die Klasse Data erweitern und sehr Klassenmember bei diser Oberklasse anmelden. Dazu bietet Data etwa eine Methode

    void registerSignedIntField(const std::string &name, int* field);
    

    Intern speichert die Data-Klasse diese Info in einer map (schlussel string, wert void zeiger). ich wandle alle zeiger, auf ints, float, klassen etc. in void zeiger (geht das auch eleganter?) und vermerke zusätzlich den datentyp in form von strings bzw. einem enum.

    Probleme aber ich, wenn ich auch einen Vector speichern möchte. Ist soll Vorschrift sein, dass in den Vector nur primitive typen, std string, vectoren und data-objekte gespeichert werden können. sonst wird zur LAUFZEIT eine Ausnahme generiert (auch nicht besonders schön). Dazu habe ich die Funktion:

    template<typename T> void registerVectorField(const std::string &name, std::vector<T> *field)
    

    in der Klasse Data. Auch der Zeiger auf den Vector wird in einen void zeiger gecastet und in die map gespeichert. um später aber wieder zurückcasten zu können muss ich wissen, welcher typ im vektor gespeichert ist. ich will also wissen, welchen typ T hat. Ich habe versucht typeid() dafür zu nutzen, jedoch kann ich damit nicht eindeutig feststellen, ob im vektor Data-objekt oder wieder vektoren gespeichert werden. wenn es es sich um ein data-objekt handelt, dann handelt es sich bei T um eine spezialisierung von Data, weil Data selbst abstrakte Klasse ist. Handelt es sich bei T um einen vektor, liefert typeid() einen namen, der nicht nur vom vektor, sondern auch von der darin enthaltenen info abhängt.

    Ich hoffe ich konnte mein Problem einigermaßen verständlich zum ausdruck bringen.

    Gruß michi



  • hat sich erledigt... habe mich für eine architektur mit wrappern für die primitives entschieden, damit sind alle probleme hinfällig...

    gruß michi


Anmelden zum Antworten