在实现一个简单的日志记录器时
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*
一样的类型吗?