我目前正在为 an 编写一个包装器std::stringstream
,我想operator<<
通过我的班级将所有调用转发到std::stringstream
. 这现在工作得很好(感谢这个问题:STL 流的包装类:转发运算符<< 调用),但它仍然存在一个问题。
假设我有以下代码:
class StreamWrapper {
private:
std::stringstream buffer;
public:
template<typename T>
void write(T &t);
template<typename T>
friend StreamWrapper& operator<<(StreamWrapper& o, T const& t);
// other stuff ...
};
template<typename T>
StreamWrapper& operator<<(StreamWrapper& o, T const& t) {
o.write(t);
return o;
}
template<typename T>
void StreamWrapper::write(T& t) {
// other stuff ...
buffer << t;
// other stuff ...
}
如果我现在这样做:
StreamWrapper wrapper;
wrapper << "text" << 15 << "stuff";
这工作得很好。但是,如果我想使用流修饰符,如http://www.cplusplus.com/reference/ios/endlstd::endl
中的一个函数,我根本不会编译。
StreamWrapper wrapper;
wrapper << "text" << 15 << "stuff" << std::endl;
为什么?我如何也转发流修饰符?