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();
本文探讨了在C++中使用动态_cast技术在基类指针或引用指向派生类对象时如何实现类型转换,并介绍了两种优化方案:直接调用派生类对象的方法和通过基类接口处理派生类。旨在提高代码的灵活性和效率。
259

被折叠的 条评论
为什么被折叠?



