求助一个关于C++ 隐藏 的问题

rovoboy 2010-04-02 10:38:06
直接说应用环境吧,我打算在C++的strstream类上继承一个自己的logstream类,但是要修改endl操作子的行为以及自己增加几个操作子。
直接从ostream类的文件中拷贝endl函数过来,把参数类型改成logstream之后,发现系统不会去调用这个endl操作子,然后我重载了 logstream::operator << (endl函数指针),结果endl操作子的行为是正确了,但是重载的operator << 因为隐藏了基类里面的operator << 操作符,结果所有其他的 << 操作符统统不能用了。。。。
解决方法是有的,就是在logstream类中把所有要用到的 << 操作符统统写一遍,然后直接调用基类的对应参数类型的操作,中间还要经过强制类型转换。。。
我希望有比较优雅的方法,于是使用using basic_stream::operator<<;来尝试不隐藏所有的<<操作符,结果和预期不太一样,基类中的那些<<操作符确实没隐藏了,但是我自己写的logstream::operator << (endl函数指针);这个函数也同时失效了,这个我一直没有想到原因和解决方法。

另外,如何增加一个操作子 比如我要增加endl2操作子,直接根据endl函数的形式,改了个名字,结果编译倒是能通过,但 <<操作符调用的不是logstream::operator << (函数指针) 而是logstream::operator << (const void*) 这个函数了
...全文
109 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cattycat 2010-04-02
  • 打赏
  • 举报
回复
不要使用using namespace std;用到哪个就用名字空间引用。 比如std::string这样不会因为名字空间覆盖吧。
楼上的办法可行。
  • 打赏
  • 举报
回复
这样行不?
class logstream 
{
std::strstream str;
public:
template<class T>
logstream& operator<<( T arg)
{
str<<arg;
return (*this);
}
logstream& operator<<( std::ostream&(*f)(std::ostream&) )
{
puts("a");
return (*this);
}

};


int main( int , char* [] )
{
logstream l ;
l << "123" << endl;
return 0;
}
phil1984 2010-04-02
  • 打赏
  • 举报
回复
operator <<()用友元
weixiaoshashou 2010-04-02
  • 打赏
  • 举报
回复
不要用std的名空间(不要把那些全部暴光)
rovoboy 2010-04-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 akirya 的回复:]
使用using 将基类的operator<<引入。

这样就可以形成重载了。
[/Quote]

我试过了,但是把我派生类里面的operator<<给搞没掉了
  • 打赏
  • 举报
回复
使用using 将基类的operator<<引入。

这样就可以形成重载了。
dukong123 2010-04-02
  • 打赏
  • 举报
回复
不会,友情支持一下

64,644

社区成员

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

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