我目前正在为 STL 流编写一个包装器来同步来自多个线程的写入调用。我有以下(简化的)代码:
class Synchronize {
private:
std::stringstream ss;
public:
void write(std::string& str) {
// locking ...
ss << str;
// unlocking ...
};
// other stuff ..
};
Synchronize& operator<<(Synchronize& o, std::string& str) {
o.write(str);
return o;
}
Synchronize& operator<<(Synchronize* o, std::string& str) {
o->write(str);
return *o;
}
现在可以调用 write()
使用 <<
的方法Synchronize
对象上的运算符类,但只能使用 std::string
.和 std::stringstream
还需要很多其他东西,比如 int
s 和 float
是否可以将此功能添加到我的 Synchronize
没有大量自己的类operator<<
功能?模板会有帮助吗?或者我应该从 iostream
扩展一些类吗?图书馆?
最佳答案
您可以将运算符重载变成 friend 模板
在你的类里面写
template<typename T>
friend Synchronize& operator<<(Synchronize& o, T const& t);
那么定义可以是
template<typename T>
Synchronize& operator<<(Synchronize& o, T const& t) {
o.write(t);
return o;
}
//edit
template<typename T>
void Synchronize::write(T& t)
{
ss << t;
}
关于c++ - STL 流 : forward operator<< calls 的包装类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14752504/