从xml QT 4.8 C++中获取类型

Get type from xml QT 4.8 C++

本文关键字:获取 取类型 C++ xml QT      更新时间:2023-10-16

我制作了这个程序,其中有一些数据类型,由用户选择。用户保存他的工作,在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" );