template class pointer in wxArray
-
hallo zusammen!
kann man irgendwie pointer auf eine template klasse in ein wxArray tun?
hier bekomme ich vermutlich durch das "class T;" in zeile 12 den fehler "error C2079: 'tempBaseClass<T>::zahl' verwendet undefiniertes class 'T'"template <class T>class tempBaseClass { public: T zahl; tempBaseClass(T _zahl){ zahl = _zahl; } }; class derivedClass : public tempBaseClass<int> { public: derivedClass(int _zahl) : tempBaseClass(_zahl) { } }; class T; WX_DEFINE_ARRAY_PTR(tempBaseClass<T>*, ArrayOfTempBaseClasses); ArrayOfTempBaseClasses *arr = new ArrayOfTempBaseClasses; derivedClass *newDerived = new derivedClass(3); arr->Add(newDerived);
-
1. Ein Klassen-Template (nicht Template-Klasse!) ist eine VORLAGE für eine Klasse. Die Klassen
MeineKlasse<int> und MeineKlasse<std::string>
aus dem Template
template <class T> class MeineKlasse
haben so nichts miteinander zu tun.
2. WX_DEFINE_ARRAY_PTR kennt ja nicht die noch zu generierenden Klassen, was soll der Compiler da machen wenn nur eine Vorlage als Parameter?
3. Erster Einfall von mir, baue eine gemeinsame Oberklasse für das Klassen-Template (also für alle noch zu generierenden Klassen) und packe diese ins Array.
Gruß
Helmut
-
danke helmut,
wie von dir beschrieben mit der gemeinsamen oberklasse funktioniert es zwar, wird aber dann schnell dreckig mit diversen reinterpred_cast.
ich verzichte dann lieber auf die eleganten templates. schade, dass da nichts geht.
-
IMHO solltest du wxArray nicht benutzen, std::vector/deque ist die bessere Alternative.
-
ich habe bisher keine probleme mit wxArray, oder würde das mit dem template mit einem vector funktionieren?
war wäre sonst noch der vorteil des vectors gegenüber wxArray?
-
wxArray ist einfach schlechtes C++.
Die ganzen Defines etc. das brauchst du bei std::vector nicht, und es ist einfach näher am Standard.
-
Wenn aber eine Funktion/Klasse aus wxWidgets ein wxArray erwartet, kommt man aber um wxArray nicht herum.
Und wenn man eine Funktion für wx schreibt, wäre es sinnlos (und kostet performance), erst std::vector zu benutzen und dann in ein wxArray um zu wandeln