请问如何用dynamic_cast代替虚函数

ccolounnol 2013-01-31 06:34:19
假设需要在派生类里面新增新成员函数,但是又无法取得基类的源代码,不能在基类里面通过加虚函数接口调用新成员函数,怎么样使得基类指针调用新的成员函数,可以通过dynamic_cast强制转换来获得调用吗?或者还有什么技巧可以使用?
...全文
216 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
dynamic_cast 貌似是把基类的指针转成派生类的,基类的指针不是由派生类初始化的,会有错吧
飞天御剑流 2013-02-01
  • 打赏
  • 举报
回复
引用 楼主 ccolounnol 的回复:
本帖最后由 ccolounnol 于 2013-01-31 18:40:15 编辑 假设需要在派生类里面新增新成员函数,但是又无法取得基类的源代码,不能在基类里面通过加虚函数接口调用新成员函数,怎么样使得基类指针调用新的成员函数,可以通过dynamic_cast强制转换来获得调用吗?或者还有什么技巧可以使用? ……
对于这个问题,动态转换并不是好的解决方法,不仅损失运行期性能,而且需要处理转换失败异常。 可使用静多态的方法解决:

struct A
{
       int  f (  ){}
}

struct B : A
{
      int . f(  ){}
}

template< typename . T >
inline int . f_wrapper( const T  & obj )
{
     return obj.f();
}
rocktyt 2013-02-01
  • 打赏
  • 举报
回复
引用 2 楼 ccolounnol 的回复:
引用 1 楼 zhcosin 的回复:正如你所说,动态转换指针类型。 具体怎么实现? class a { ... }; class b:puble class a { void get(void){} }; a *obj=dynamic_cast<b*>(new b); 好像不行啊
class a
{};
class b:puble class a
{
	void get(void)
	{}
};
a *obj=new b;
(dynamic_cast<b*>obj)->get();
这样吧 不过不管怎么说,这样做已经失去了多态的意义,调用前必须指定类型
wuyg719 2013-02-01
  • 打赏
  • 举报
回复
做不到的,基类设计不好没招。
ccolounnol 2013-01-31
  • 打赏
  • 举报
回复
引用 1 楼 zhcosin 的回复:
正如你所说,动态转换指针类型。
具体怎么实现? class a { ... }; class b:puble class a { void get(void){} }; a *obj=dynamic_cast<b*>(new b); 好像不行啊
zhcosin 2013-01-31
  • 打赏
  • 举报
回复
正如你所说,动态转换指针类型。

64,664

社区成员

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

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