2010-05-27 83 views
0

我想從TinyXML(C++)從XML文件加載數據。TinyXML和獲取值

int height = rootElem->attrib<int>("height", 480); 

rootElem是加載的XML文件的根元素。我想從它(整數)加載高度的值。但是我對這個東西的包裝功能:

template<typename T> 
T getValue(const string &key, const string &defaultValue = "") 
{ 
    return mRootElement->attrib<T>(key, defaultValue); 
} 

它與字符串:

std::string temp = getValue<std::string>("width"); 

和打水時失敗:

int temp = getValue<int>("width"); 


>no matching function for call to ‘TiXmlElement::attrib(const std::string&, const std::string&)’ 

UPD:新版本代碼:

template<typename T> 
T getValue(const string &key, const T &defaultValue = T()) 
{ 
    return mRootElement->attrib<T>(key, defaultValue); 
} 

回答

1

原因是你正在調用TiXmlElement :: attrib的int版本,但是你給它一個類型爲const std :: string &的defualtValue,但是該函數需要一個int類型的defaultValue。

1

attrib<T>(key, defaultValue)可能期望它的第一個參數是與第二個模板參數相同的類型。

換句話說; TmRootElement->attrib<T>(key, defaultValue)必須與defaultValue的類型相同。