2010-11-20 12 views
2

ストリーム挿入演算子をオーバーロードしようとしているので、std :: vectorをstd :: coutに出力できますが、構文に問題があります。ストリーム挿入演算子にテンプレートをオーバーロードする方法は?

これは私が試したものです:

template<typename T> std::ostream & operator<<(std::ostream &os, std::vector<T> &v) 
{ 
    std::copy(v.begin(), v.end(), std::ostream_iterator<T>(os, ', ')); 
    return os; 
}; 

そして、私はこのようにそれを使用したい:

std::vector<float> v(3, 1.f); 
std::cout << v; 

演算子オーバーロードのようなもののための正しい構文は何ですか?

+1

私のために働きます... ''、' 'の代わりに明白な' '、' 'を除いて – Kos

答えて

2

コードは、しかし、ほとんど大丈夫です:

  • セパレーター', 'が正しくありません:ありconst std::vector<T> &v
  • :あなたの関数ができた(とすべきである)Vへのconst参照を取る", "
  • を使用します不必要な;関数の後ろの中かっこ:

レコードの場合、', 'intmulti-character constantであるため、std::ostream_iteratorコンストラクタのオーバーロードが引数リスト'(std::ostream, int)'と一致しないことをコンパイラが訴えています。

+0

私はC++のテンプレート構文知識ではあまりにも不安定で、些細なことでした。どうもありがとうございました。新鮮な目が良く見えます。 – Bojan

+0

icecrimeに説明を追加するには、C&C++で_characters_ not _strings_を区切るのに一重引用符を使用する – tobyodavies

+0

ソースファイルをVisual StudioでUTF-8として保存するので、文字と文字列リテラルは常に1バイトです。 – Bojan

関連する問題