競プロにおいて、
cpp
1int A[3] = {1, 2, 3}; 2cout << A << "\n";
のようなことをしたくてoperator<<
をオーバーロードしようとしたのですが、つまづいてしまいました。
http://koyumeishi.hatenablog.com/entry/2016/02/01/152426
このサイトで、vector<T>
でのオーバーロードがあったので、これを参考に自分で書いてみたのですが、うまくいきません。
cpp
1template<typename T, size_t SIZE>ostream& operator<<(ostream& os, T(&arr)[SIZE]){ 2 os<<"{"; 3 for(int i=0;i<SIZE;++i) 4 os<<(i?", ":"")<<arr[i]; 5 os<<"}"; 6 return os; 7}
これだと、const char[SIZE]
も含まれてしまい、「os<<"{";
がambiguousだよ」と怒られます(それはそう)。オーバーロードで実装するとしたら、どうするのがいいのでしょうか?
追記
単にdebug_arr(T(&arr)[SIZE])
という関数として実装しようとすると、二次配列のときにうまくデバッグができないので、オーバーロードでの実装を知りたいです。
cpp
1template<typename T, size_t SIZE>void debug_arr(2T(&arr)[SIZE]){ 2 cout<<"{"; 3 for(int i=0;i<SIZE;++i) 4 cout<<(i?", ":"")<<arr[i]; 5 cout<<"}"; 6} 7int A[2][3] = { 8 {1,2,3}, 9 {4,5,6}, 10}; 11debug_arr(A); // {配列のアドレス,配列のアドレス}という出力がされる
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/09 15:32