1

複雑な問題があり、助けが必要です。

私はベースケースを持っています、

class ParamBase
{
    string paramValue;
    //...
}

さまざまなテンプレートパラメータを持つ一連のクラステンプレート。

template <typename T>
class Param : public ParamBase
{
   T value;
   //...
}

現在、Paramの各インスタンスには、異なるテンプレートパラメータ、double、int、string...などがあります。

簡単にするために、作成されたすべてのインスタンスを含む基本クラスポインターへのベクトルがあります。

vector<ParamBase*> allParamsObjects;

質問は:

異なるテンプレート引数を使用してこれらの異なるインスタンスの文字列paramValueをすべて変換し、変換結果をParam :: valueの適切なタイプに保存する単一の関数(グローバルまたはメンバーまたは任意の選択)を実行するにはどうすればよいですか。これは、ベクターallParamsObjectsに保存されているすべてのオブジェクトに対して実行する必要があります。

したがって、最初のParamのテンプレート引数がdoubleの場合、paramValueをdoubleに変換して、値に保存する必要があります。2番目のParamの引数がintの場合、2番目のparamValueをintに変換し、valueに保存する必要があります...など。

どんな助けでも大歓迎です:-)

4

2 に答える 2

1

このようなもの?

class ParamBase {
    std::string paramValue;
public:
    virtual void convert() = 0;
};

template <typename T>
class Param : public ParamBase
{
    T value;
public:
    virtual void convert() {
        std::stringstream ss(paramValue);
        ss >> value;
    }
};
于 2012-04-06T17:24:24.020 に答える
0

で抽象メソッドConvertを宣言しParamBase、テンプレート化された各派生クラスに実装して文字列を値に変換してから、ループ内でそのメソッドを呼び出します。

于 2012-04-06T17:26:00.057 に答える