取 operator<< 之类的运算符重载函数的地址

cxjddd 2004-12-19 07:02:22
重载运算符其实也是定义一个函数,只是这个函数有点隐晦。首先我们要面对的就是运算符被重载得太多,必须要有办法区别类型,此时用模板最好了。

template <typename fun_type>
fun_type addr_fun(fun_type a)
{ return a; }

使用:
typedef ostream& out_type(ostream&, int); // ostream& operator << (ostream&, int)
addr_fun<out_type>(operator <<);

事实上,有更简单的办法:
out_type f = operator <<;

这些方法,对普通的重载的函数同样使用。
...全文
189 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
nicknide 2005-01-05
  • 打赏
  • 举报
回复
楼上正解
yjh1982 2005-01-05
  • 打赏
  • 举报
回复
不是应该typedef ostream& (*out_type)(ostream&, int); // ostream& operator << (ostream&, int)么
北极猩猩 2005-01-05
  • 打赏
  • 举报
回复
operator<<一般是有缘函数,不过如果有重载函数怎么办呢,会不会造成二义性?
somedummy 2005-01-05
  • 打赏
  • 举报
回复
楼主看帖子的时候给我留个言……
somedummy 2005-01-05
  • 打赏
  • 举报
回复
楼主的ACM怎么样了?也没听见你进群里面汇报一下……


另外,好像没有操作符不能用成员函数重载的
greenteanet 2005-01-05
  • 打赏
  • 举报
回复
一般都是友员吧
cxjddd 2004-12-22
  • 打赏
  • 举报
回复
operator << 可以是成员函数吗?这个我不太知道 -_-#

如果是成员函数的话,也还是可以取地址的,只是类型变了,还有调用也会变。
nicknide 2004-12-22
  • 打赏
  • 举报
回复
事实上,有更简单的办法:
out_type f = operator <<;

晕,要是这种呢?
class A
{
operator << (int){}
};

这个operator <<
和operator<<(ostream&,int)
中的不同吧……

一个是__cdecl 一个就是成员函数 A::operator<<
而且class ostream中的重载int不是成员函数咯?std::ostream::operator<<
pacman2000 2004-12-22
  • 打赏
  • 举报
回复
这样也行。。。不过函数名本来就是函数地址。。。
Leaveye 2004-12-19
  • 打赏
  • 举报
回复
<>
sharkhuang 2004-12-19
  • 打赏
  • 举报
回复
。。。。。。。。。。。。
cxjddd 2004-12-19
  • 打赏
  • 举报
回复
不好意思,out_type 错了,应该如下:
typedef ostream& (*out_type)(ostream&, int);

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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