在实现简单的记录器时
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;
};
Run Code Online (Sandbox Code Playgroud)
我发现std::endl不会被通用引用捕获.
DebugOutput dbg;
dgb << std::endl;
Run Code Online (Sandbox Code Playgroud)
我发现这篇文章解释了你需要在结构中添加一个特别是函数指针签名的重载函数,即:
typedef std::ostream& (*StandardEndLine)(std::ostream&);
inline DebugOutput& operator<<(StandardEndLine manip) {
return *this;
}
Run Code Online (Sandbox Code Playgroud)
为什么通用引用不捕获函数指针?是不是类型int或void*?