c++ - 让 C++ 类充当自定义 ostream、sstream

标签 c++ operator-overloading ostream sstream

我有一个 C++ 类 MyObject我希望能够像向 osstream 一样提供这些数据(但与直接 sstream 不同,输入数据以特殊方式格式化)。我似乎无法弄清楚如何为 MyObject 重载运算符以吃掉给它的输入。

class MyObject {
public:
    ostringstream s;
    FEEDME
};


int main() {
     MyObject obj;
     obj.FEEDME << "Hello" << 12345;

     // I want obj.s == ":Hello::12345:"

}

我想要它,所以每个输入的项目都被 : : 包围

因此在给定的示例中,s = ":Hello::12345"应该是最终结果。我的问题是,我怎样才能告诉对象什么时候有 <<something , 把 : : 放在某物周围。

这可能吗?

最佳答案

试试这个:

class MyObject {
public:
    template <class T>
    MyObject &operator<<(const T &x) {
        s << ':' << x << ':';
        return *this;
    }

    std::string to_string() const { return s.str(); }

private:
    std::ostringstream s;
};

MyObject obj;
obj << "Hello" << 12345;
std::cout << obj.to_string() << std::endl;

有些东西你无法插入流中,但它应该适用于所有基础知识。

关于c++ - 让 C++ 类充当自定义 ostream、sstream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/823003/

相关文章:

c++ - std::atomic::operator++ 真的按值返回吗?

C++ 表示数字的十进制值的 2 个字符串的乘法

c++ - 输出以空格分隔的列表

c++ - 使用两种方法覆盖 << 运算符

c++ - 将 QUdpSocket 用于自定义 FFMPEG I/O(原始 H.264)

c++ - 关于容器中元素的引用

c++ - 具有std::span的C++ Ranges-v3:从函数返回范围 View 时,中间对象的所有权

c++ - C++中按引用传递和按值传递之间重载歧义的实用解决方案

c++ - 使用运算符重载时,没有运算符 "<<"匹配这些操作数

c++ - 指向结构变量的指针未保存到 eeprom