2017-09-08 12 views
-1

C++で(scan()などのような)関数を持つことが可能であるかどうかは、std::cinの構文と同じですか? C++ 17ではC + +で 'std :: cin'を 'scan()'関数にする方法はありますか?

std::cin >> data; // or 
scan(data); 
+0

あなたは何が起こると思いますかについての完全な説明があります。 – StoryTeller

+0

私はちょうどJavaScriptからロールオーバーし、私はPHPを学んでいます。そこで私は、C++でI/O( 'cout'と' cin')のための関数を持つのが良いと考えました。 – Oluwafunmito

+0

いいですね。しかし、それはあなたが何が起こると予想するか説明していません。 C++を知っている人もJavascriptやPHPを知っていると仮定しないでください。 – StoryTeller

答えて

6

、あなたは、引数の任意の量を取り、あなたのためのcin >> a >> b >> c >> ...チェーンを生成する関数を作成するためにvariadic templatefold expressionを使用することができます。

template <typename... Ts> 
std::istream& scan(Ts&... xs) 
{ 
    return (std::cin >> ... >> xs); 
} 

は使用方法:

int i; 
double j; 
scan(i); 
scan(i, j); 

if (scan(i, j)) 
    std::cout << "Read " << i << ", " << j << "\n"; 
else 
    std::cout << "Invalid input\n"; 

live example on wandbox

+0

申し訳ありませんが、私はまだC++の初心者ですから、説明はいいと思います。ありがとう – Oluwafunmito

+1

いくつかの情報を追加し、バリデーショナルテンプレートに関する記事を探し、ラーニングリソース用の折り畳み式 –

+0

@VittorioRomeo:折り畳み式なしでこれを行うことができますか? – geza

1

あなたはちょうどあなたがあなたが入力した文字列を要求されますと、あなたの入力が割り当てられます。この

void scan(std::string & input) 
{ 
    std::string newInput; 

    cin << newInput; 

    input = newInput; 

} 


std::string myString; 

scan(myString); 

ような何かを行うことができ、あなたの入力に基づいて、あなたが渡すのparamaterに値を割り当てられた機能を作りたい場合myStringに。

関連する問題