详见srs-packet
/*这是从网上摘下的例子,主要讲述了 dynamic_cast<> 的使用方法。*/
作用:将一个基类对象指针(或引用)cast到继承类指针,dynamic_cast会根据基类指针是否真正指向继承类指针来做相应处理,
即会作一定的判断。
对指针进行dynamic_cast,失败返回null,成功返回正常cast后的对象指针;
对引用进行dynamic_cast,失败抛出一个异常,成功返回正常cast后的对象引用。
注意:dynamic_cast在将父类cast到子类时,父类必须要有虚函数。例如在下面的代码中将CBasic类中的test函数不定义成
virtual时,编译器会报错:error C2683: dynamic_cast : “CBasic”不是多态类型
模板使用:
class SrsProtocol
{
public:
template<class T>
int decode_message(SrsMessage* msg, T** ppacket)
{
int ret = ERROR_SUCCESS;
*ppacket = NULL;
SrsPacket* packet = NULL;
if ((ret = do_decode_message(xxx, &packet)) != ERROR_SUCCESS) {
return ret;
}
T* pkt = dynamic_cast<T*>(packet);
*ppacket = pkt;
return ret;
}
};