我制作了这个程序,其中您有某种数据,用户可以选择哪种类型。用户保存他的工作,并且在 xml 保存文件中我想写他使用什么类型的变量,所以当我必须打开保存时,我的程序分配了正确的数据示例模板:
C++:
template <class T>
class Data{
private:
T variable;
...
};
XML:
<header>
<type>int</type>
</header>
所以在这里,当我加载保存文件时,我想Data<int>
分配一个...
您需要创建工厂,以及将值名称(以字符串形式)“映射”到其中一个工厂的管理器。像这样:
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" );