Ben std::endl
universal reference tarafından yakalanan olmaz öğrendim basit loggerNeden bir işlev gösterici evrensel referans ile yakalanmıyor?
struct DebugOutput {
DebugOutput(std::ostream& out = std::cerr) : m_Out(out) {}
template<typename T>
inline DebugOutput& operator <<(T&& value) {
m_Out << value;
return *this;
}
private:
std::ostream& m_Out;
};
uygularken.
DebugOutput dbg;
dgb << std::endl;
Ben açıklayan bu
this post Özellikle fonksiyon işaretçisi imzasını alır yapısı, yani içinde bir aşırı işlev eklemek gerekir bulundu: işlev işaretçisi evrensel tarafından yakalanan değildir Neden
typedef std::ostream& (*StandardEndLine)(std::ostream&);
inline DebugOutput& operator<<(StandardEndLine manip) {
return *this;
}
referans ? int
veya void*
olarak bir tür değil mi?
Bu bir şablon/aşırı yüklenmiş. – Xeo
http://stackoverflow.com/a/1136617/46642 –
Mümkün çoğaltıcı [std :: endl, aşırı yükleme işleci olduğunda bilinmeyen türde <<] (http://stackoverflow.com/questions/1134388/stdendl-is- bilinmeyen-tipi-aşırı-yükleyici-operatör) – Xeo