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

标签 c++ stl wrapper operator-keyword

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

相关文章:

c++ - 自定义 STL 容器包装器报告奇怪的编译器错误

wrapper - 更改 Woocommerce 中的简码包装器

c++ - 从派生构造函数调用基类的虚函数

c++ - "Permission denied" "Id returned 1 exit status"是什么意思?

c++ - 访问对象内部的指针

c++ - 插入到 multimap 导致段错误

c++ - 什么是正确的 std::set_union 代码?

c++ - 如何在包含指向元素的指针的集合中找到元素?

javascript - 从原型(prototype)更改/包装函数

c++ - 全新的 UE5 C++ 项目构建时不会出现任何错误