c++ - 从 xml QT 4.8 C++ 获取类型

标签 c++ xml qt load xmlreader

我制作了这个程序,其中包含某种数据,用户可以选择哪种类型。 用户保存他的工作,在 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" );

关于c++ - 从 xml QT 4.8 C++ 获取类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15051791/

相关文章:

c++ - MSVC 2010 中的 isnan() 在哪里?

缺少 PHP - SSL 证书 - Subdreamer

XML 动态对象和 IEnumberables

qt:将窗口移出屏幕后,如何将其移回默认位置,包括默认定位行为?

sql - 如何访问从 QSqlquerymodel 集合查询返回的元素

通过模板 : why doesn't this work? 的 C++ 混合

c++ - 函数指针问题

c++ - 斐波那契堆的 STL?

c# - 从字符串XML读取数据

c++ - 使用计时器重复调用函数