概述
dynamic_cast的作用:在derived class身上执行derived class 执行函数,手头只有指向base的pointer或reference.
方案一:
class Window{...};
class SpecialWindow:public Window{
public:
void blink();
...
};
typedef std::vector<std::tr1::shared_ptr<window>> VPW;
VPW winPtrs;
...
for(VPW::iterator iter=winPtrs.begin();iter!=winPtrs.end();++iter){
if(SpecialWindow* psw=dynamic_cast<SpecialWindow*>(iter->get())
psw->blink();
}
应该这样做:
typedef std::vector<std::tr1::shared_ptr<SpecialWindow>> VPSW;
VPW winPtrs;
...
for(VPSW::iterator iter=winPtrs.begin();iter!=winPtrs.end();++iter)
(*iter)->blink();
方案二:
通过base class接口处理window派生类,在base class内提供virtual函数做window派生类想做的事。
class window{
public:
virtual void blink(){} //什么也不做
...
};
class SpecialWindow:public Window{
public:
virtual void blink(){...}; //做事
...
};
typedef std::vector<std::tr1::shared_ptr<window>> VPW;
VPW winPtrs; //容器内含指针,指向所有可能window类型
...
for(VPW::iterator iter=winPtrs.begin();iter!=winPtrs.end();++iter)
(*iter)->blink();
最后
以上就是诚心鸭子为你收集整理的Dynamic_cast的效率问题的全部内容,希望文章能够帮你解决Dynamic_cast的效率问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复