【发布时间】:2013-10-03 12:54:43
【问题描述】:
在实现一个简单的记录器时
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 不会被universal reference 捕获。
DebugOutput dbg;
dgb << std::endl;
我发现了这个this post,它解释了您需要在结构中添加一个重载函数,该函数专门采用函数指针签名,即:
typedef std::ostream& (*StandardEndLine)(std::ostream&);
inline DebugOutput& operator<<(StandardEndLine manip) {
return *this;
}
为什么函数指针没有被通用引用捕获?不是int 或void* 的类型吗?
【问题讨论】:
-
这是一个模板/重载。
-
谢谢@R.MartinhoFernandes 我错过了这个解释准确的评论。