重载operator&之后

snailmmx 2003-08-22 08:05:17
一个类A重载了operator&,然后对于它的一个对象aaa,&aaa就成了去调用这个成员函数了。但现在我想取aaa的地址,自么办?
另:这个类我没办法修改。
...全文
69 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sevecol 2003-08-23
  • 打赏
  • 举报
回复
下面的可能最安全

template<typename T>
T* GetPoint(T& t)
{
class Point:public T
{
int tt;
T* GetAddress(T* t)
{
return t;
}
public:
T* operator&()
{
return GetAddress(this);
};
};
return (static_cast<Point&>(t)).operator&();
};
sevecol 2003-08-23
  • 打赏
  • 举报
回复
template<typename T>
T* GetPoint(T& t)
{
class Point:public T
{
public:
T* operator&()
{
return (T*)this;
};
};

return (static_cast<Point&>(t)).operator&();
};
短歌如风 2003-08-22
  • 打赏
  • 举报
回复
啊!忘了用this了。如果不要求使用opreator&的话,sevecol的方法不错。

由于_com_ptr没有虚成员,也没有多继承,其时它的opreator&返回的还是和对象的指针值一样,就是多了一个讨厌的assert.去掉后强制转型一下就能用。
短歌如风 2003-08-22
  • 打赏
  • 举报
回复
找到_com_ptr中的自定义的operator&代码,把assert删掉就可以用了。不过你就要自己保证在调用CreateInstance时它的intf成员应该为NULL(未调用过CreateInstance、未赋值或调用了Release、赋了一个NULL值)
sevecol 2003-08-22
  • 打赏
  • 举报
回复
帮你封装了一个函数

template<typename T>
T* GetPoint(T& t)
{
class Point:public T
{
public:
Point* operator&()
{
return this;
};
};

Point& temp=static_cast<Point&>(t);
return (T*)(&temp);
};
sevecol 2003-08-22
  • 打赏
  • 举报
回复
class Base
{
int t;
public:
int operator&()
{
return 10;
};
};

class Test:public Base
{
public:
Test* operator&()
{
return this;
};
};

//
Base a;

Test& b=static_cast<Test&>(a);

Base* p=(Base*)(&b);
sandrowjw 2003-08-22
  • 打赏
  • 举报
回复
那就干脆跳过_com_ptr吧。
snailmmx 2003-08-22
  • 打赏
  • 举报
回复
呜呼,我用的正是_com_ptr
短歌如风 2003-08-22
  • 打赏
  • 举报
回复
没有办法。
如果你的类没有虚函数,还可以用取第一个成员的地址再强制转型来得到(不过很危险)。

运算符重载要少用,而operator&(取地址)根本不要重载。看一下这个贴子:
http://expert.csdn.net/Expert/TopicView1.asp?id=1709597

64,648

社区成员

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

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