2013-02-24 48 views
0

我製作了這個程序,你有某種數據,哪種類型是用戶選擇的。 用戶保存他的工作,並在XML保存文件,我想寫什麼類型,他用變量的 所以當我不得不打開保存我的程序分配數據 例如合適的模板:從xml獲取類型QT 4.8 C++

C++:

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

XML:

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

所以在這裏,當我加載保存文件我想有一個Data<int>分配...

回答

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");