При использовании простого регистратора
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;
};
Я обнаружил, что std::endl
не будет захвачен универсальной ссылкой .
DebugOutput dbg;
dgb << std::endl;
Я нашел этот этот пост, в котором объясняется, что вам нужно добавить перегруженную функцию внутри структуры, которая специально использует подпись указателя функции, то есть:
typedef std::ostream& (*StandardEndLine)(std::ostream&);
inline DebugOutput& operator<<(StandardEndLine manip) {
return *this;
}
Почему указатель функции не захватывается универсальной ссылкой? Разве это не тип int
или void*
?