2016-05-04 4 views
0

私はPoco C++ライブラリ、特にHTTPクライアント/サーバ解析の作業を開始しています。 HTTPRequest、HTTPResponseなどのクラスがあり、 "read(std :: istream)"というメソッドがあることがわかりました。このメソッドは、 "std :: istream"型の入力引数を取ります。しかし、私はこれをコマンドラインから入力したものと一緒に使いたい。私は入力を取るためにcinを使用していますが、istreamとcinは異なるタイプのものであるため、これはエラーとなります。C++/Pocoのコマンドライン入力のためのistream

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

} 

私の理解では、読み取りメソッドはHTTPRequest型としてデータを解釈します。私はテストのためにこれをやっています。私は "文字列"型はうまく動作しないと知っていますが、getlineなどでistreamコンストラクタを使ってみましたが、それでもコンパイル時エラーが出ます。では、これを行う理想的な方法は何ですか?

+0

'のstd :: cin'は'のstd :: istream'のタイプがあります。それは 'extern istream cin;と定義されています。 – smac89

答えて

1

POCOのdocsによれば、HTTPRequest :: readメソッドはstd::istreamオブジェクトをとります。

void read(
    std::istream & istr 
); 

標準入力からリクエストを読みたい場合は、std :: cinをパラメータとして渡します。それは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::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; 
} 
関連する問題