0

ユーザーが選択したタイプのデータがあるこのプログラムを作成しました。ユーザーは自分の作業を保存し、xml 保存ファイルに使用した変数のタイプを書きたいので、開く必要があるときにプログラムがデータ例の適切なテンプレートを割り当てます。

C++:

template <class T>
class Data{
private:
T variable;
...
};

XML:

<header>
  <type>int</type>
</header>

ここで保存ファイルをロードするときに、Data<int>割り当てたい...

4

1 に答える 1

1

ファクトリと、値の名前 (文字列形式) をファクトリの 1 つに「マップ」するマネージャを作成する必要があります。このような:

class AbstractData {}

template <class T>
class Data : public AbstractData {
private:
    T variable;
    ...
};

class FactoryManager
{
    ...
    typedef std::function< AbstractData* () > Factory;   

    void registerFactory( const QString& name, const Factory& factory )
    {
        //  Check to see one is not already registered before adding.
        map_.insert( name, factory );
    }

    AbstractData* createData( const QString& name )
    {
        //  Check factory exists first.
        return map_[name]->createData();
    }

private:
    QHash< QString, Factory > map_;
}

...
FactoryManager manager;
manager.registerFactory( "int", [](){ return new Data< int >; } );
...
Data< int >* data = manager.createData( "int" );
于 2013-02-25T08:28:06.840 に答える