TemplateVector möglich?
-
Es geht es darum das ich z.b. einmal ein <int> und einmal ein <float> nutzen möchte. aber letztendlich nur einen vector<command> haben möchte. (die Templateklasse heißt eigentlich command, ich hab nur vergessen das zu ändern.)
-
boost::any
-
Also moechtest du sowas wie dznamische Typisierung oder type erasure?
-
ja ich denke das es so heißt.
ich habs gerade getestet.
vector<Command> // funktioniert nicht, da das template keinen typ hat. vector<Command<int>> // funktioniert, ist aber nicht das was ich möchte.Ich bräuchte einen vector der sowohl Command<int>s und Command<floats> beinhaltet.
Wie der Name schon erahnen lässt, möchte ich dorthinein einige Kommandos speichern, über die ich durchiterieren möchte.
-
du könntest auch von Command ableiten:
class Command {}; class IntCommand : public Command { int value; }; class FloatCommand : public Command { float value; };
-
struct AbstractCommand { virtual ~AbstractCommand(); }; template<typename T> struct ConcreteCommand : AbstractCommand { T Value; }; typedef some_smart_ptr<AbstractCommand> CommandPtr; std::vector<CommandPtr> Commands; int main() { Commands.push_back( CommandPtr( new ConcreteCommand<int>() ) ); Commands.push_back( CommandPtr( new ConcreteCommand<float>() ) ); }Verdammt, zu spät

-
DocShoe schrieb:
Verdammt, zu spät

dafür aber als prinzipiell elegantere Template-Lösung

-
cl90 schrieb:
Ich habe mich gerade gefragt ob man einen Vector von einem Template mit unterschiedlichen variablentypen erstellen kann?
Kommst du aus Java?
Sicher dass du nicht einfach nur
floatshaben kannst, oder dass du nicht zwei Container (einen fürintund einen fürfloat) haben willst?
-
Das grundsätzliche Missverständnis ist
cl90 schrieb:
(die Templateklasse heißt eigentlich command, ich hab nur vergessen das zu ändern.)
Es handelt sich hier nicht um eine Templateklasse, sondern um eine Klassenvorlage (bzw. Klassentemplate). Command ist keine Klasse, und daher kannst du auch keinen Vektor davon haben. Genausowenig, wie du einfach
std::vector v; // <-- geht nicht; std::vector ist keine Klasse.schreiben kannst.
-
Danke es gab viele hilfreiche Posts hier!
Ich habe jetzt eine Klasse geschrieben die soweit alle Funktionalitäten von vector anbietet die ich brauche. Nur das ich 3 verschiedene Typen push_backen kann. Funktioniert gut
Aber wenn ich Zeit habe, werde ich die abgeleiteten Klassen probieren! Die sehen gut aus.