输出流 operator<< 的重载问题~ 如何才能达到这样的效果~

icesnowjank 2009-03-12 02:58:34
其实是一个多线程写LOG文件的问题~ 我的想法是 重载 '<<' 操作符
比如写这样的语句: g_log << "Test" << loc_nMd5 <<endl;

g_log 会把 上述的 "Test"和loc_nMd5 插入到一个buffer 里面 ~ 然后 推入队列~

现在的问题就是 如何去重载 '<<'

obj& operator<<(???)
{
string* str = new string;
str->push_back("Test");
str->push_back(loc_nMd5);
push(str);
}
...全文
313 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
beyond071 2009-03-19
  • 打赏
  • 举报
回复
学习了!
tujunf 2009-03-18
  • 打赏
  • 举报
回复
楼主的意思是想往流输出2个对象?

operator << 只有两个参数,其中第2个是被输出的对象。

要同时输出两个可以用 pair 打个包
taoyanxu1989 2009-03-14
  • 打赏
  • 举报
回复
mark
lqflyc 2009-03-12
  • 打赏
  • 举报
回复
1楼最好
lqflyc 2009-03-12
  • 打赏
  • 举报
回复
不要用<<这个操作
我感觉也不太好
还不如用 动态参数"..."
xtting_8984313 2009-03-12
  • 打赏
  • 举报
回复
如果多线程,这样出来的话,可能一个log,被拆成多个部分,中间掺杂了其他log的信息。

我感觉不好。除非保证一次log信息在<<传递之前已经完整生成。
chin_chen 2009-03-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 icesnowjank 的帖子:]
其实是一个多线程写LOG文件的问题~  我的想法是 重载 ' < <' 操作符
比如写这样的语句: g_log < < "Test" < < loc_nMd5 < <endl;

g_log 会把 上述的 "Test"和loc_nMd5 插入到一个buffer 里面 ~ 然后 推入队列~

[/Quote]
没看到你那个g_log.这个g_log是个队列么?我把它当成一个输出流来看了。
herman~~ 2009-03-12
  • 打赏
  • 举报
回复

list<string> liBuff;

CObject& operator << (CObject & cObj, const std::string str)
{
liBuff.push_back(str);

}
chin_chen 2009-03-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 icesnowjank 的帖子:]
其实是一个多线程写LOG文件的问题~  我的想法是 重载 ' < <' 操作符
比如写这样的语句: g_log < < "Test" < < loc_nMd5 < <endl;

g_log 会把 上述的 "Test"和loc_nMd5 插入到一个buffer 里面 ~ 然后 推入队列~

现在的问题就是 如何去重载 ' < <'

obj& operator < <(???)
{
string* str = new string;
str->push_back("Test");
str->push_back(loc_nMd5);
push(str);
}
[/Quote]

#include<queue>
using namespace std;
class my_queue:public queue<string>
{
......
friend ostream & operator<<(ostream &out,const string &in)
{
push_back(in);//这样效率更高一些,你那样的话,动态分配很浪费的。而且封装性不太好;这样会好很多的。

}
.....
}

xuruichen 2009-03-12
  • 打赏
  • 举报
回复
ostream& operator <<(ostream&os ,const String &str)
{
string* str = new string;
str->push_back("Test");
str->push_back(loc_nMd5);
push(str);
}
ding
sagegz 2009-03-12
  • 打赏
  • 举报
回复
参数如下:

ostream& operator <<(ostream& (the name you need), const String &str)
ayw215 2009-03-12
  • 打赏
  • 举报
回复
ostream& operator <<(ostream&os ,const String &str) 
{
string* str = new string;
str->push_back("Test");
str->push_back(loc_nMd5);
push(str);
}
  • 打赏
  • 举报
回复

obj& operator <<(obj&..what name ,const String &str)
{
string* str = new string;
str->push_back("Test");
str->push_back(loc_nMd5);
push(str);
}

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧