いくつかのパラメータを含むオブジェクト(ダイアグラムと呼びます)で構成されるプログラミングの問題を解決しようとしています。各パラメーター(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抽象基本クラスにテンプレート化されたパラメーターを含めることはできません。どんな助けでも大歓迎です。
PS私にはboost::anyを使用する柔軟性がありません。