2013-05-28 116 views
0

假設我有一個字符串,例如string values = "hello 2 88.9 true",它包含多個不同類型的值。我有幾個變量是用適當的類型聲明的(這裏是一個字符串,一個int,一個float和一個bool)。我基本上想要做的是這樣的:解析類型名稱

field0 = getValue(0,values); 
field1 = getValue(1,values); 
... etc 

所以,我要的是一個getValue返回類型對應的字段類型相匹配。這是簡單的模板可能嗎?我覺得你不能在模板函數的參數中指定你想要使用的返回類型,而不需要使用模板類型。 函數本身可能會使用boost的lexical_cast和一個stringstream,但如果你有更好的解決方案,我也爲此而努力!

我是新來的模板,所以我非常感激的解釋...

回答

0
using std::stringstream; 
using std::string; 

string a; 
int b; 
double c; 
bool d; 

string values = "hello 2 88.9 true"; 
stringstream in(values); 
in >> a >> b >> c >> std::boolalpha >> d; 
+0

看起來粘粘d,謝謝!是否有其他類型,如布爾不會被stringstream處理?字符串'values'實際上來自TCP端口,我不應該知道我在運行前收到了什麼。但我不希望有一個不愉快的驚喜,所以我希望代碼儘可能通用。 – wrousseau

+0

請注意,如果您的輸入爲「1 2.3 true」,而第一個字符串字段不存在,則變量a,b,c和d將分別爲1,2,0.3,true。但是由於投入不健全,因此沒有正確的解釋方法。 –

0

我會做這樣的:

#include <sstream> 
... 
std::stringstream ss; 
ss << values; 
ss >> field0 >> field1 >> field2 >> field3; 

如果我真的想它作爲一個getValue功能,我可能做粗而有效的方法:

template<typename T> 
void getValue(unsigned int n, string str, T &val) 
{ 
    string junk; 
    std::stringstream ss(str); 
    for(unsigned int k=0; k<n; ++k) 
    ss >> junk; 
    ss >> val; 
    return; 
} 
相關問題