5
単純な可変テンプレート関数を書きましたが、なぜ機能しないのか理解しようとしています。 (その出力の対応は完璧に動作します。)参照渡しのパラメーターパック
#include <iostream>
void read() {}
template<class curr_t, class... rest_t>
void read(curr_t &var, rest_t... rest)
{
std::cin >> var;
read(rest...);
}
int main()
{
int a = 0, b = 0, c = 0;
read(a, b, c); //input: 1 2 3
std::cout << a << b << c; //output: 1 0 0
std::cin.ignore();
std::cin.get();
}
a b c
のコメントからわかるように
、I入力1 2 3
と私が手出力が1 0 0
です。明らかなように、a
だけがその値を保存します。なぜこのようなことが起こったのか、それを解決するために何ができるのでしょうか?ありがとう!
EDIT :: はい、明らかにパラメータパックのコンセプトが間違っていました。 私はまた、次のことをやろうとしていました:rest_t... &rest
これは私にコンパイラエラーを与えます。
代わりにrest_t&... rest
と書くと、意図したとおりに動作します。私はそれが私の側で構文エラーであったと思います!誰かがこれを答えとして投稿し、1分後に彼の答えを削除してくれてありがとう! D:
多分、 'rest'が値渡しと関係しているのでしょうか? – LogicStuff
関数 'read'が無限に繰り返されるとは思いませんか? – vishal
しかし、私が理解するように、パラメータパック "unpacks"として、パックの最初の要素(この場合)はcurr_t&varになります。 – DeiDei