我有以下類模板,它有一個成員變量,其類型由模板參數確定。我想在構造函數中初始化這個成員的值,它只需要std::string
。因此,我的問題是我需要將std::string
轉換爲幾種類型中的任何一種(int
,double
,bool
,string
)。我不認爲我可以只專注於構造函數,我不希望每個類都專門化整個類。下面我的代碼的問題是,stringstream
停止流了出來,當它擊中一個空間:如何將std :: string轉換爲構造函數中的幾種類型之一?
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
template <typename Ty>
struct Test
{
Ty value;
Test(string str) {
stringstream ss;
ss.str(str);
ss >> value;
}
};
int main()
{
Test<int> t1{"42"};
Test<double> t2{"3.14159"};
Test<string> t3{"Hello world"};
cout << t1.value << endl << t2.value << endl << t3.value << endl;
return 0;
}
上述代碼的輸出是:
42
3.14159
Hello
,而不是「世界,你好」。有什麼辦法可以讓stringstream
不會停留在空白區域,或者其他一些設備會像我需要的那樣進行任意轉換?
我建議看看[Boost.Lexical_Cast](http://www.boost.org/doc/libs/1_61_0/doc/html/boost_lexical_cast.html) –