Trong khi thực hiện một logger đơn giảnTại sao một con trỏ hàm không bị bắt bởi tham chiếu chung?
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;
};
tôi phát hiện ra std::endl
sẽ không bị bắt bởi các universal reference.
DebugOutput dbg;
dgb << std::endl;
tôi thấy this post này mà giải thích bạn cần phải thêm một chức năng quá tải trong cấu trúc mà mất đặc biệt là con trỏ chữ ký chức năng, ví dụ:
typedef std::ostream& (*StandardEndLine)(std::ostream&);
inline DebugOutput& operator<<(StandardEndLine manip) {
return *this;
}
Tại sao con trỏ hàm được không bị bắt bởi các phổ quát tài liệu tham khảo ? Đây không phải là loại int
hoặc void*
?
Đó là một mẫu/quá tải. – Xeo
http://stackoverflow.com/a/1136617/46642 –
có thể trùng lặp của [std :: endl là loại không xác định khi toán tử quá tải <<] (http://stackoverflow.com/questions/1134388/stdendl-is- của không biết-loại-khi-quá tải-nhà điều hành) – Xeo