gpt4 book ai didi

c++ - STL 流 : forward operator<< calls 的包装类

转载 作者:行者123 更新时间:2023-11-30 02:57:20 26 4
gpt4 key购买 nike

我目前正在为 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com