-2
如果我static_cast指向派生類對象的指針指向基類指針,然後解引用該指針並將其作爲方法參數傳遞,爲什麼基類類型的解除引用指針而不是派生類型?它仍然指向派生類的對象,但取消引用的類型是基礎的?C++指向類的指針
template <typename T>
inline void AttachEvent(EventID eventId, T* eventHandler) // the second paramater is a class derived from EventHandler
{
cout << eventHandler << endl;
static_assert(std::is_base_of<EventHandler, T>::value, "Class provided is not derived from EventHandler");
EventManager* pEventManager = EventManager::GetSingletonPtr();
assert(pEventManager);
if (pEventManager)
{
pEventManager->AttachEvent(eventId, *static_cast<EventHandler*>(eventHandler));
}
}
void EventManager::AttachEvent(EventID eventId, EventHandler& eventHandler)
{
EventMapIterator result = m_eventMap.find(eventId);
assert(result != m_eventMap.end());
if (result != m_eventMap.end())
{
assert(result->second);
result->second->AttachListener(eventHandler);
}
}
所以你問爲什麼演員確實要做它聲稱做的? – Adam
噢,它會轉換它指向的指針和對象嗎? –
顯示代碼示例並解釋爲什麼您認爲其可觀察行爲是違反直覺的。 –