vs2013环境下*this如何强制执行非const引用

xyconly 2016-06-02 02:50:59
一个公用操作类A,包含函数:
void A::OP(ClassB& );
void A::OP(const ClassB& );

另一个类B,其成员函数中调用A::OP(*this),
实际运行中发现执行为
void A::OP(const ClassB& );

如何强制指定调用const或非const引用.
...全文
90 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
fefe82 2016-06-03
  • 打赏
  • 举报
回复
B::func(...) const { A::OP(*this); //const A::OP(*const_cast<B*>(this)); // non-const , 这是违反协议的,最好不要这么干 ... } B::func(...) { A::OP(*this); //non-const A::OP(*(const B*)this); // const }
赵4老师 2016-06-02
  • 打赏
  • 举报
回复
xyconly 2016-06-02
  • 打赏
  • 举报
回复
引用 2 楼 akirya 的回复:
重载的话,获取成员函数指针。再调用。 void(A::*p)(Class B&) = &A::OP; A* pa = xxxx; (pa->*p)( *this );
引用 3 楼 ID870177103 的回复:
如果*this是const的那肯定会调用const ClassB&的啊 如果*this不是const那一般会调用ClassB&,除非是非特化的模板
引用 1 楼 zhao4zhong1 的回复:
不懂帮顶
不好意思了,之前由于心急,一时看错,确实是由于*this的属性决定的,当传入const就是执行const,传入非const就是执行非const 采用
void(A::*p)(Class B&) = &A::OP;
A* pa = xxxx;
(pa->*p)( *this );
的方式也可以直接设定引用的函数. 感谢赵四老师帮顶
ID870177103 2016-06-02
  • 打赏
  • 举报
回复
如果*this是const的那肯定会调用const ClassB&的啊 如果*this不是const那一般会调用ClassB&,除非是非特化的模板
  • 打赏
  • 举报
回复
重载的话,获取成员函数指针。再调用。 void(A::*p)(Class B&) = &A::OP; A* pa = xxxx; (pa->*p)( *this );
赵4老师 2016-06-02
  • 打赏
  • 举报
回复
不懂帮顶

64,677

社区成员

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

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