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内容请搜索靠谱客的其他文章。
发表评论 取消回复