2010-11-20 38 views
2

Akış ekleme işlecini aşırı yüklemeye çalışıyorum, böylece std :: vektörü std :: cout'a yazdırabilirim, ancak sözdizimi ile sorun yaşıyorum.Akış yerleştirme operatörü bir şablonla nasıl yüklenir?

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; 
}; 

Ve bu gibi kullanmak istedi:

Bu denedim budur

operatör aşırı yüklenme için bu tür doğru sözdizimi nedir
std::vector<float> v(3, 1.f); 
std::cout << v; 

?

+1

Benim için işler ... Açık olan "," yerine "," – Kos

cevap

2

kod ancak neredeyse gayet:

  • ', ' yanlıştır ayırıcı: const std::vector<T> &v
  • bir yok: ", " (ve olmalıdır) v için bir sabit başvuru sürebilir İşleviniz
  • kullanmak fonksiyon yakın ayracı :) kayıt için

sonra ; gereksiz, ', ' olduğunu Bir multi-character constant tip int, böylece derleyici yapıcısının aşırı yüklenmesinin '(std::ostream, int)' argüman listesiyle eşleşmediğinden şikayetçidir.

+0

hariç, C++ şablon sözdizimi bilgimde çok güvensizdim ve büyük bir hata yaptım. önemsizdi. Çok teşekkür ederim. Taze gözler daha iyi görüyor. – Bojan

+0

sadece ne icecrime söyledi bir açıklama eklemek için, tek fiyatlandırma c/C++ – tobyodavies

+0

_characters_ değil _strings_ sınırlamak için kullanılır Ben kaynak dosyaları UTF-8 Visual Studio olarak kaydediyorum böylece karakterler ve dize literals her zaman tek bayt vardır. – Bojan