###質問内容
現在私は可変長引数テンプレートを使い
すべて型が同じ可変長引数から入力された
値をすべて表示するというプログラムを作成しています。
そこで可変長引数を全てstd::coutで出力するprintメソッドと
そのメソッドと全く同じ実装のoperator<<を持つ構造体Aを作成して動かしてみました。
結果はprintメソッドの方は思った通りの動きをしました。
しかしoperator<<の方は可変長引数の最初だけ表示されて残りの引数の内容は
表示されませんでした。
コンパイルはエラーもwaningも吐かずに成功しますが結果がおかしいです。
どうすればoperator<<の方でもすべての値を表示させられるのか教えてください。
どうかよろしくお願いします。
下記がコードです。
c++
1#include <iostream> 2 3template<typename TYPE> 4struct A{ 5 template<typename ...ARGS> 6 void print(ARGS... args){ 7 for(const TYPE& itr:{args...}){ 8 std::cout << itr << ","; 9 } 10 std::cout << std::endl; 11 } 12 13 template<typename ...ARGS> 14 A& operator<<(ARGS... args){ 15 for(const TYPE& itr:{args...}){ 16 std::cout << itr << ","; 17 } 18 std::cout << std::endl; 19 return *this; 20 } 21}; 22 23int main(){ 24 25 A<int> a; 26 a.print(1, 2, 3, 4, 5); 27 a << 1,2,3,4,5; 28 29 return 0; 30}
###結果
terminal
11,2,3,4,5, 21, ←引数の最初の数字しか表示されない。
###補足情報(FW/ツールのバージョンなど)
OS:LinuxMint18.3 Cinammon
コンパイラ:g++ 7.4.0
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/02/01 03:38