【问题标题】:istream for command line input for C++/Pocoistream 用于 C++/Poco 的命令行输入
【发布时间】:2016-08-29 08:32:59
【问题描述】:

我开始使用 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 类型。我这样做只是为了测试。我知道“字符串”类型不起作用,但我尝试使用带有 getline 等的 istream 构造函数,但它仍然给出编译时错误。那么理想的方法是什么?

【问题讨论】:

  • std::cinstd::istream 的一种类型。定义为extern istream cin;

标签: c++ http networking poco


【解决方案1】:

根据 POCO 的 docsHTTPRequest::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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多