0

我制作了这个程序,其中您有某种数据,用户可以选择哪种类型。用户保存他的工作,并且在 xml 保存文件中我想写他使用什么类型的变量,所以当我必须打开保存时,我的程序分配了正确的数据示例模板:

C++:

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

XML:

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

所以在这里,当我加载保存文件时,我想Data<int>分配一个...

4

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 回答