<分区>
我目前正在为 std::stringstream
编写包装器我想转发所有operator<<
通过我的类(class)调用std::stringstream
.这现在工作得很好
(感谢这个问题:wrapper class for STL stream: forward operator<< calls),但它仍然存在一个问题。
假设我有以下代码:
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";
这很好用。但是如果我想使用像 std::endl
这样的流修饰符, 这是一个根据 http://www.cplusplus.com/reference/ios/endl 的函数,我就是不编译。
StreamWrapper wrapper;
wrapper << "text" << 15 << "stuff" << std::endl;
为什么?我如何也转发流修饰符?