Senin sorunun <<
zinciri, tek log << endl
da soruna neden olur ilgili değil. basic_ostream
içinde operator<<
yüklenilmesi gibi
template <class charT, class traits>
basic_ostream<charT,traits>& endl(basic_ostream<charT,traits>& os);
biri: std::cout<<std::endl
kullanıldığında
template <class charT, class traits = char_traits<charT> >
class basic_ostream : virtual public basic_ios<charT,traits> {
public:
basic_ostream<charT,traits>& operator<<(
basic_ostream<charT,traits>& (*pf)(basic_ostream<charT,traits>&));
//...
};
Yani şablon parametreleri sonucuna varılabilir std::endl
bir şablon işlevi olduğu belirtilmektedir. Ancak, sol taraf class Logger
olduğunda, derleme endl
şablon parametrelerini çıkaramaz. Açıkça şablon programı derlemek sağlayabilirsiniz parametrelerini ve iş vermek:
#include <iostream>
class Logger
{
public:
std::ostream &m_file;
Logger(std::ostream &o = std::cout):m_file(o){};
template <typename T>
Logger &operator<<(const T &a) {
m_file<<a;
return *this;
}
};
int main()
{
Logger log;
log<<std::endl<char, std::char_traits<char> >;
log<<"hi"<<" stackoverflow"<<std::endl<char, std::char_traits<char> >;
return 0;
}
Yoksa derleyici şablon std::endl
parametrelerini anlamak izin class Logger
içinde operator<<
yeni bir aşırı ekleyebilirsiniz: eğer Ayrıca
#include <iostream>
class Logger
{
public:
std::ostream &m_file;
Logger(std::ostream &o = std::cout):m_file(o){};
template <typename T>
Logger &operator<<(const T &a) {
m_file<<a;
return *this;
}
Logger &operator<<(std::ostream& (*pf) (std::ostream&)){
m_file<<pf;
return *this;
}
};
int main()
{
Logger log;
log<<std::endl;
log<<"hi"<<" stackoverflow"<<std::endl;
return 0;
}
Hemen temizlenecek çıktıya ihtiyacınız yok, endl
yerine '\ n' kullanabilirsiniz.
"Ayrıca, '\ n' yerine endl'' arasında kullanabilirsiniz.": Bakınız OP, çıktı arabelleklerinin temizlendiğinden emin olmak istiyorsa, [yakın zamanda öğrendim] (http://stackoverflow.com/q/8311058/440558). –
Doğru, cevabımı ekleyeceğim. – fefe
Teşekkür ederim, işe yarıyor :) – Tuxer