Если я 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
О, поэтому он преобразует как указатель, так и объект, на который он указывает? –
Показать образец кода и объяснить, почему вы считаете, что его наблюдаемое поведение является нелогичным. –