簡體   English   中英

istream用於C ++ / Poco的命令行輸入

[英]istream for command line input for C++/Poco

我開始使用Poco C ++庫,尤其是對於HTTP客戶端/服務器解析。 我看到有一些類,例如HTTPRequest,HTTPResponse等,它們都有一個名為“ read(std :: istream)”的方法。 此方法采用類型為“ std :: istream”的輸入參數。 但是,我想將此與我從命令行輸入的內容一起使用。 我正在使用cin進行輸入,但是由於istream和cin是不同類型,因此這會產生錯誤。 這是一個例子:

int main() {
  HTTPRequest* req = new HTTPRequest();
  std::string input;
  std::cout << "Enter something.. " << std::endl;
  std::cin >> input;
  req->read(input);

}

我的理解是read方法會將數據解釋為HTTPRequest類型。 我這樣做只是為了測試。 我知道“字符串”類型將無法工作,但是我嘗試將istream構造函數與getline等配合使用,但仍會給出編譯時錯誤。 那么理想的方法是什么呢?

根據POCO的文檔HTTPRequest :: read方法采用std::istream對象。

void read(
    std::istream & istr
);

如果要從標准輸入讀取請求,請傳遞std :: cin作為參數。

int main() {
  HTTPRequest* req = new HTTPRequest();
  // std::string input;
  // std::cout << "Enter something.. " << std::endl;
  // std::cin >> input;
  req->read(std::cin);

  return 0;
}

當它嘗試從std::cin讀取時,它將提示您輸入內容,因此您可以輸入要輸入的任何內容。 然后,我建議您使用std::ifstream對象或使用std::istringstream 這兩個都是std::istream子類,因此您可以將其作為參數傳遞。

例如:

int main() {
  HTTPRequest* req = new HTTPRequest();
  std::string input;
  std::cout << "Enter something.. " << std::endl;
  std::cin >> input;
  std::istringstream iss(input);

  req->read(iss);

  return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM