В настоящее время я пишу класс для переноса потока строк. Моя общая цель - обеспечить потокобезопасный << (ostream) для моего stringstream. У меня проблемы с определением правильного синтаксиса того, что я пытаюсь сделать. Любая помощь будет самой благодарной! </p>
Ниже вы найдете то, что я пробовал. Я знаю, что это неправильный синтаксис, но это то, для чего я стреляю. Конечно, я не мог бы перегружать оператор << и заставлять пользователей использовать AddValue, но это не было бы идеально для быстрой и простой манипуляции со строками во время написания кода. </p>
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 и вызываю AddValue, который не является const - что приводит к ошибке квалификатора сбросов.