从xml QT 4.8 C ++获取类型

时间:2013-02-24 12:37:01

标签: c++ xml qt load xmlreader

我制作了这个程序,你有一些数据,用户可以选择这种类型。 用户保存他的工作,并在xml保存文件中我想写他使用的变量类型, 因此,当我必须打开保存时,我的程序会分配正确的数据模板 例如:

C ++:

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

XML:

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

所以这里当我加载保存文件时,我希望分配Data<int> ...

1 个答案:

答案 0 :(得分: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" );