Итак, я увидел такой код:
template<class T>
T* safe_ptr_cast(Message& msg) {
assert(msg.header()->size() == T::size());
return msg.header()->size() == T::size ? reinterpret_cast<T*>(msg.dest()) : NULL;
}
Как можно сотворить msg
?Как правило, список параметров должен иметь тип параметра T
, чтобы функция могла распознать тип для приведения.Однако в этом случае тип параметра указывается явно.Означает ли это, что reinterpret_cast
приведёт тип сообщения к соответствующим подклассам?
Например, у класса Message
есть подкласс RequestMessage
с некоторыми дополнительными членами, подкласс ResponseMessage
с некоторыми дополнительными членамитакже.Я предполагаю, что размер RequestMessage
равен 50
байтов, а ResponseMessage
равен 100
байтов.После приведения, если объект msg
имеет 50 байтов, он будет приведен к RequestMessage
, а если объект msg
имеет 100
байтов, он будет приведен к ResponseMessage
.Это правильно?