我读了几篇关于使用静态和动态演员的专题文章When should static_cast, dynamic_cast, const_cast and reinterpret_cast be used?以下C++转换是否正确?
我对以下方式使用演员表有疑问。有人可以验证下面提到的代码: -
这是在继承层次向上铸造
template<class Base, class Derived>
inline Handle<Base> STATIC_CAST(Handle<Derived> hd) {
Handle<Base> hb;
Derived* dp = hd.get(); // Assume this gives pointer of derived class object
Base* bp = static_cast<Base*> (dp);
if(bp) {
hb = Ptr2Handle(bp); // Assume this give reference to Handle
}
return hb;
}
*衍生实际上是从基类派生类。
在下面的代码中向下投射如何?
template<class Base, class Derived>
inline Handle<Derived> DYNAMIC_CAST(Handle<Base> hb) {
Handle<Derived> hd;
Base* bp = hb.get();
Derived* dp = dynamic_cast<Derived*> (bp);
if(dp) {
hd = Ptr2Handle(dp);
}
return hd;
}
如果上述两个MACROS通过Base和Derived类交换传递,会有什么影响?
是基础派生的相关类型吗? – Naveen 2009-11-27 17:49:53