Sto cercando di risolvere un problema di programmazione costituito da un oggetto (chiamarlo Diagramma), che contiene diversi parametri. Ogni parametro (la classe Parameter) può essere uno di diversi tipi: int, double, complex, string - per nominarne alcuni.Classe C++ con variabile membro modello
Quindi il mio primo istinto è stato quello di definire la mia classe Diagram come avente un vettore di parametri del modello, che sarebbe simile a questo.
class Diagram
{
private:
std::vector<Parameter<T> > v;
};
Questo non viene compilato e ho capito perché. Quindi, sulla base delle raccomandazioni su questa pagina How to declare data members that are objects of any type in a class, ho modificato il mio codice a guardare come:
class ParameterBase
{
public:
virtual void setValue() = 0;
virtual ~ParameterBase() { }
};
template <typename T>
class Parameter : public ParameterBase
{
public:
void setValue() // I want this to be
// void setValue(const T & val)
{
// I want this to be
// value = val;
}
private:
T value;
};
class Diagram
{
public:
std::vector<ParameterBase *> v;
int type;
};
Sto avendo difficoltà a capire come chiamare la funzione setValue con un parametro su modelli appropriato. Non è possibile avere un parametro di modello nella classe di base astratta ParameterBase. Qualsiasi aiuto è molto apprezzato.
P.S. Non ho la flessibilità per usare boost :: any.
Non è possibile impostare virtualmente il parametro su alcun valore, è necessario eseguire il cast nel parametro 'Parametro' o rimuovere l'oggetto e crearne uno nuovo –
Non utilizzare un setter, utilizzare un costruttore, quindi puoi sempre fare 'v.push_back (nuovo parametro (mio));' –
Perché non convertirli in un tipo comune e convertirli quando necessario? Ecco come vengono solitamente fatte cose come questa. – KillianDS