В этом случае просто приведите явно к типу, который вы хотите отправить с static_cast
.Он позаботится о деталях, если знает, какой тип преобразуется из / в него.
То есть:
X *theX = ...;
void *ptr = static_cast<Z*>(theX)
Затем в коде получения:
void *ptr = ...;
Z *theZ = static_cast<Z*>(ptr);
И если вы знаете , что это на самом деле X
:
X *theX = static_cast<X*>(theZ);
Нижняя строка: всякий раз, когда вы приводите указатель на void*
иназад, он должен быть преобразован в тот же тип, что и раньше.
Таким образом, это не определено:
X *theX = ...;
void *ptr = static_cast<void*>(theX);
Z *theZ = static_cast<Z*>(ptr); //Undefined behavior!!!
Событие, хотя Z
является подклассом X
, ипрямое static_cast
между ними сработало бы.