胡说八道

学而不思则罔,思而不学则殆

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  132 随笔 :: 0 文章 :: 58 评论 :: 1 Trackbacks
这次还是CSDN上的帖子的问题:
 重载operator&之后

 一个类A重载了operator&,然后对于它的一个对象aaa,&aaa就成了去调用这个成员函数了。但现在我想取aaa的地址,自么办?
 另:这个类我没办法修改。

 我的做法是:  中间层
 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&(); 
 };

 我对C++标准不是很熟悉,不知道T* GetAddress(T* t)能否正确的将this转成T*而做到和编译器无关?我觉得应该是。

 如果你有什么好的做法,告诉我知道,拜托了.

posted on 2004-12-29 11:36 胡说八道 阅读(381) 评论(1)  编辑 收藏 所属分类: 自己的想法

评论

#1楼  2008-01-31 12:13 min2max [未注册用户]
boost似乎有address_of函数,实现了你要的功能,

它大致是这样实现的:
template <typename T>
T* address_of(T& v)
{
struct address_of_helper {};
return reinterpret_cast<T*>(&reinterpret_cast<address_of_helper&>(v));
}


  回复  引用  查看    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
 
另存  打印
最新IT新闻:
· 雅虎首页大变脸 阿里风格上身
· 万名Linux使用者向暴雪请愿Linux版《Diablo III》
· 56.com我乐网将全面转行 退出视频行业
· Joost借道TOM在线 将正式进军中国
· 微软副总裁公开承认Vista存在问题