2011-11-19 24 views
0

基本上我有從C++的std :: istream的使用沒有命令行的std :: istream?

istream& getline (istream& is, string& str); 

線程讀數而當我結合istream的與cin,然後它,當我鍵入從標準的命令行作爲輸入的輸入工作正常。

但我想知道是否有一種方法,我可以使讀取線程getline獲取字符串沒有 使用實際的命令行?

基本上我想實現這一點:

通過只是調用一個函數WriteToIStream與參數str(而不是在命令行中鍵入STR)和讀線程getilne()可以得到str

void WriteToIStream(string& str) 
{ 
//... 
} 

非常感謝

+0

爲什麼使用全局'cin'這個 - 你可以創建一個只用於與線程通信的新流。 –

+0

「獲取字符串,而不使用實際的命令行」,你想從哪裏得到字符串呢? – ybungalobill

+0

@KerrekSB:可以請給我一個簡單的例子,因爲我沒有真正寫過一個新的流,只使用了那些C++ iostream fstream等。在這種情況下也可以提升:: iostream幫助? – Gob00st

回答

3

cin一個的輸入流,綁定到標準輸入的實例。對於你的情況,你可以使用一個istringstream(或更一般地,stringstream),這是一個輸入流從一個字符串讀取:

std::istringstream istr("foobar"); 
getline(istr, some_string_variable); 

這就要求標準頭<sstream>

+0

getline默認delim是'\ n',所以假設每次我需要getline需要從共享istr讀取stst,我只需要做istr <<「從讀線程讀取新字符\ n」? – Gob00st

+0

@ Gob00st不,你不需要這個,因爲當然閱讀將停止在流/字符串的末尾,不需要換行符。這與任何其他流相同**。 'istringstream'不是*特殊情況。 –

+0

我試過這個,但是當我在讀線程中用istringstream使用getline時,它立即返回,而不是等待getline用cin做的輸入。你能解釋爲什麼嗎? – Gob00st