<solved> Template Klasse mit versch. Member-Typen



  • Ich zerbreche mir gerade den Kopf über ein Template-Problem. Folgende Ausgangslage:

    Ich habe unterschiedlichste Datentypen und muss ein Interface bauen welches einige dieser Datentypen kapselt und unter einem Pointer zur Verfügung stellt. Beispiel:

    struct myStruct{
        int a;
        float b;
    }
    

    Nun weiß ich aber nicht ob a ein int wird oder vielleicht doch ein const char* und b ein float oder gar ein myFancyClassInstance.
    Die erste Idee ist natürlich daraus ein Template zu machen, aber da fängt der Ärger an. Wie kann ich zwei (oder mehr) Member eines Objekts von unbekanntem Typ deklarieren?
    Mein Ansatz ist:

    template <class T, class U>
    class CEntity<T, U> {
    public:
    	CEntity(){}
    	~CEntity(){}
    
    	// entity
    	T* getNode(){ return this->entity; }
    	void setNode(T *entity) { this->entity = entity; }
    
    	__declspec(property(get = getNode, put = setNode)) T *node;
    
    private:
    	T *entity;
    	U *entityExtra;
    };
    

    Dieses Konstrukt kompiliert problemlos, aber wie verwende ich es? Folgendes funktioniert schon mal nicht:

    CEntity<ICameraSceneNode, CCameraExtra> *entity = new CEntity<ICameraSceneNode, CCameraExtra>;
    

    Für Schubser in die richtige Richtung wäre ich wahnsinnig dankbar. 🙂



  • Wie das immer so ist. Sechs Stunden daran herum denken, ins Forum posten und dann selbst drauf kommen. Bei

    class CEntity<T, U>
    

    muss natürlich das

    <T, U>
    

    weg, dann funktioniert alles wie es soll.



  • Was ist denn

    __declspec(property(get = getNode, put = setNode)
    

    Für eine Extension? Und was macht das?



  • das ist eine Visual Studio Extension. Sie bewirkt dass man auf Methoden wie auf public member zugreifen kann.


Log in to reply