C流运算符问题
发布时间:2020-12-16 05:50:51 所属栏目:百科 来源:网络整理
导读:我想这可能是所有这里的大师的简单问题,但我以某种方式找不到答案. 我想要能像csv这样简单地编写csv单元格: stream 1 2 "Tom" std::endl; 这将创造出输出像1,2,汤姆.我该如何实现呢?我想我需要创建自定义streambuf(因为我不认为这是在流级别上执行的正确方
我想这可能是所有这里的大师的简单问题,但我以某种方式找不到答案.
我想要能像csv这样简单地编写csv单元格: stream << 1 << 2 << "Tom" << std::endl; 这将创造出输出像1,2,汤姆.我该如何实现呢?我想我需要创建自定义streambuf(因为我不认为这是在流级别上执行的正确方法,只是为了重载<<<对于所有类型),但我不确定如何<通常实现.它是否调用put或write或什么.我应该覆盖那些还是什么?还是我完全错过了一些东西? 我很感激任何帮助:) 干杯, 解决方法
得到像98%的方式那样不是很难的事情:
#include <iostream> class add_comma { std::ostream &os; bool begin; typedef add_comma &ref; public: add_comma(std::ostream &o) : os(o),begin(true) {} template <class T> ref operator<<(T const &t) { if (!begin) os << ","; os << """ << t << """; begin = false; return *this; } ref operator<<(std::ostream &manip(std::ostream &o) ) { if (&manip == &std::endl) reset(); manip(os); return *this; } void reset() { begin = true; } operator void *() { return (void *)os; } }; int main() { add_comma a(std::cout); a << 1 << 2 << "This is a string" << std::endl; a << 3 << 4 << "Another string" << std::endl; return 0; } 编辑:我已经至少在某种程度上修改了代码 – 现在只将逗号放在写入的项目之间,而不是一行的开头.然而,它只会将“endl”识别为表示新记录的开始 – 例如,字符串文字中的换行符将不起作用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |