Abstrakte Klasse gibt einen vector zurück?

Unicate

Erfahrenes Mitglied
Hallo alle zusammen!

Ich habe eine Abstrakte Klasse, welche eine Methode zur Verfügung stellen soll, welche einen std::vector zurück gibt.

C++:
#include <vector>
template<class T>
class AbstractParameter {
private:
	ParameterType _type;
	std::vector<T> _values;
public:
	AbstractParameter(ParameterType type) {_type = type;}
	virtual ~AbstractParameter();

	ParameterType getParameterType() {return _type;}

	std::vector& getValues() {return _values;};


};

class MyParameter : public AbstractParameter<int> {
...

Das aber funktioniert nicht, da der Rückgabetyp von getValues keinen Typen für den Vector definiert.

Kann man das trotzdem irgendwie machen?


Ziel ist es viele AbstractParameter in einem eigenen Vektor abzulegen und bei Verwendung per typid gecastet werden muss.
 
Zuletzt bearbeitet:
Sowas, geht dann aber nicht:

C++:
std::vector<?> list;
MyParameter1 p1; //<int>
MyParameter2 p2; //<std::string>
list.push_back(p1);
list.push_pack(p2);

Wie kann ich das realisieren?
 
Nein du kannst natürlich keine vectoren mischen. Du kannst in einen vector nicht einen anderen Typ als den bei der Definition angegebenen abspeichern. Wenn du das mit build-in Types machen willst geht das nicht.
Wenn du aber selbst kreierte Objekte abspeichern möchtest, könntest du alle deine Klassen, die du im vector speichern willst von einer Klasse ableiten und dann Pointer oder Referenzen auf diese Objekte in deinem Vector speichern (siehe Object-based-hierarchy).
Aber verschiedene Objekte im Vector abspeichern funktioniert nicht.

Was willst du denn genau machen?

Lg
 
Naja, ich baue eine Effectbibliothek.

Jeder Effekt hat eine feste Anzahl(abhängig vom Effekt) von Parametern, diese wiederum mit unterschiedlichen Datentypen. (bsp: Effect X hat 2 Parameter vom typ in und 3 vom typ char)

Nun habe ich eine EffectFactory, welche mir einen Effect anhand einer ID erstellen soll.
Wobei der Effect selbst ein set von Parametern hat, die bei bedarf geändert werden können.
 
Zuletzt bearbeitet:
Also verstehe ich das jetzt richtig: In einem Abstract Parameter werden mehrere Parameter desselbe Typs gespeichert. Und diese Abstract Parameter werden dann durch Vererbung kombiniert in der Klasse MyParameter? Und die MyParameter Objekte willst du dann in einem Vector speichern, wie du das im Beispielcode gemacht hast?

Wie willst du denn dann das mit MyParameter genau realisieren? Also wenn du die AbstractParameter durch Vererbung zu MyParameter kombinierst, wie erstellst du dann die verschiedenen Effekte, dann müsstest du ja auch mehrere Arten von MyParameter haben (also beispielsweise durch Templates). In deinem Beispiel vererbst du ja MyParameter von AbstractParameter<int>. Das wäre dann ja nur für einen Effekt eine bestimmte Anzahl von int's bekommt. Wie willst du dann andere Effekte erstellen?

Lg
 
Zurück