Während eine einfache Logger UmsetzungWarum wird ein Funktionszeiger nicht von einer universellen Referenz erfasst?
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;
};
ich std::endl
fand heraus, würde nicht durch die universal reference erfasst werden.
DebugOutput dbg;
dgb << std::endl;
Ich fand diese this post, die Sie hinzufügen müssen eine überladene Funktion innerhalb der Struktur, die, dh insbesondere die Funktionszeiger Unterschrift nimmt erklärt:
typedef std::ostream& (*StandardEndLine)(std::ostream&);
inline DebugOutput& operator<<(StandardEndLine manip) {
return *this;
}
Warum die Funktionszeiger nicht erfasst wird durch die Universal Referenz ? Ist es nicht ein Typ wie int
oder void*
?
Es ist eine Vorlage/überladen. – Xeo
http://StackOverflow.com/a/1136617/46642 –
mögliches Duplikat von [std :: endl ist vom unbekannten Typ beim Überladen des Operators <<] (http://stackoverflow.com/questions/1134388/stdendl-is- von-unknown-type-when-overloading-operator) – Xeo