为什么这段代码不起作用?
std::shared_ptr<Event> e = ep->pop();
std::shared_ptr<TrackerEvent> t;
t = std::dynamic_pointer_cast<TrackerEvent>(e);
我收到以下错误:
/usr/include/c++/4.6/bits/shared_ptr.h:386: error: cannot dynamic_cast '(& __r)->std::shared_ptr<Event>::<anonymous>.std::__shared_ptr<_Tp, _Lp>::get [with _Tp = Event, __gnu_cxx::_Lock_policy _Lp = (__gnu_cxx::_Lock_policy)2u]()' (of type 'class Event*') to type 'class TrackerEvent*' (source type is not polymorphic)
TrackerEvent
继承自Event
所以我想问题是我不能朝这个方向投。但ep->pop()
可能会返回类型Event
或TrackerEvent
. 我希望当我尝试将它投射到TrackerEvent
它并返回时,NULL
我会知道我是否有一个Event
或TrackerEvent
......
我该怎么做?