frage template?



  • Hallo,

    nehmen wir an, wir haben eine Klasse welche Elemente verwaltet, wobei die Elemente ein Objekt vom Typ T enthalten, udn einen extra Paramenter iExtPara.

    template<class T>
    class Master{
    
    class Elem{
    
     int iExtPara;
     T DataObjekt;
    
    };
    
    std::list<Elem> data;
    
    add(T &Elem){...}
    
    };
    Master<X> o;
    o.add(X(..));
    

    wenn ich nun ein Objekt X als T eines Elemetes hinzufüge, gib es ne möglichkeit vom Objekt X aus auf das iExtPara zuzugreifen?



  • also bei mir gehts

    #include <list>
    #include <iostream>
    
    using namespace std;
    
    template<class T>
    class Master
    {
    public:
    	class Elem
    	{
    	public:
    		Elem(int para, T data) : iextPara(para), DataObjekt(data) {};
    		int iExtPara;
    		T DataObjekt;
    	};
    
    	std::list<Elem> data;
    
    	void add(Elem& elem)
    	{
    		data.push_back(elem);
    	}
    }; 
    
    int main(int argc, char* argv[])
    {
    	Master<int> val;
    
    	val.add( Master<int>::Elem(5,4) );
    
    	return 0;
    }
    

    ich musste bei Master::add nur Elem& elem schreiben.



  • Danke schonmal, aber ich meinte das ich jetzt wie heir im Beispiel von dem Sdata objekt aus, auf das enstsprechen iExtData variabel des Element wo das Sdata obejkt drin steckt zugreifen kann...

    class Sdata{
    
      int a,b;
    
    Sdata(int a, int b) : a(a), b(b){}
    
    void func(){
     //Zugriff auf iExtData
    }
    
    };
    
    Master<Sdata> val;
    
    val.add( Master<SData>::Elem(5,SData(1,2)) );
    


  • hola

    du koenntest der klasse Elem einen pointer auf iExtPara mitgeben.
    wenn man genau wuesste in welchem abstand im speicher iExtPara zum this-pointer deines template-members liegt, dann koenntest du dir die adresse auch ausrechnen.
    aber ich bezweifel mal das das so ohne weiteres moeglich ist.
    hoechstens wenn man das speicheralignment auf 1 byte setzen wuerde oder so aehnlich.

    Meep Meep



  • in java kann die nested class soweit ich weiß ohne probleme auf member der "super"-klasse zugreifen. in c++ geht das meines erachtens nicht. korrigiert mich, wenn ich unrecht habe (Ausnhame: die nested klass hat nen pointer/referenz auf die übergeordnete klasse)


Anmelden zum Antworten