【发布时间】:2019-09-27 18:03:44
【问题描述】:
我目前正在编写一个类来包装字符串流。我的总体目标是为我的字符串流提供一个线程安全的
您将在下面找到我尝试过的内容。我知道这不是正确的语法,但这正是我所追求的。我当然不能重载
class WrappedStringStream
{
public :
WrappedStringStream() ;
template<typename T>
void AddValue( const T & value )
{
m_mutex.Lock() ;
//here I'd like to do something like m_stringstream << value, but of course since
//I'm overloading operator<< that won't work
m_mutex.Unlock() ;
}
friend std::ostream & operator<<( std::ostream & out, const WrappedStringStream & string )
{
string.AddValue( out ) ;
return out ;
}
protected :
std::stringstream m_stringstream ;
mutable Mutex m_mutex ;
}
如上所述,它无法编译,我理解这是因为我将 WrappedStringStream 作为 const 参数传递并调用不是 const 的 AddValue - 导致丢弃限定符错误。
【问题讨论】:
-
当你做
string.AddValue(out)时,这到底应该做什么? -
@0x499602D2 AddValue 函数在上面定义了我希望它执行的 cmets。
-
是的,但是当
value是std::ostream时m_stringstream << value没有意义,这是您传递给AddValue的内容。 -
您对流操作符的实现似乎与我的期望不符。为什么将一个元素流式传输到流中会更新这样的元素?
-
@0x499602D2,我意识到它没有任何意义,但它是我想要做的指导,请不要将语法视为绝对。我想重载我的类 operator
标签: c++ stringstream ostream istream