Макрос создает фиктивный указатель на ClassName
с reinterpret_cast
, а затем преобразует его в BaseName
с static_cast
.
При наличии множественного наследования адрес подобъекта базового класса не всегда совпадает с адресом объекта. Этот возможно другой адрес вычитается из исходного фиктивного адреса, чтобы получить смещение подобъекта BaseName
в объекте ClassName
. Это похоже на offsetof
, но для подобъектов базового класса вместо членов.
Это полезно, только если вы делаете неприятные вещи низкого уровня.