Я пытаюсь решить проблему программирования, состоящую из объекта (назовем его Diagram), который содержит несколько параметров. Каждый параметр (класс Parameter) может быть одним из нескольких типов: int, double, complex, string - для обозначения нескольких.
Итак, мой первый инстинкт заключался в том, чтобы определить мой класс Diagram как имеющий вектор параметров шаблона, который будет выглядеть следующим образом.
class Diagram
{
private:
std::vector<Parameter<T> > v;
};
Это не компилируется, и я понимаю, почему. Итак, основываясь на рекомендациях на этой странице Как объявить члены данных, которые являются объектами любого типа в классе, я изменил свой код так:
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;
};
Мне трудно понять, как вызвать функцию setValue с соответствующим шаблоном. В базовом классе ParameterBase нельзя использовать шаблонный параметр. Любая помощь приветствуется.
P.S. У меня нет гибкости в использовании boost:: any.