Макрос BASE_OFFSET из Essential COM - PullRequest
       10

Макрос BASE_OFFSET из Essential COM

5 голосов
/ 10 декабря 2011

Я читаю Essential COM и обнаружил макрос 'BASE_OFFSET' из главы 2 книги, и я не совсем понимаю его синтаксис или почему это так.макрос и как мы это используем?Фактически, книга использует этот макрос, но, поскольку я не совсем понимаю его, я не вижу практического использования его.Заранее большое спасибо.

1 Ответ

7 голосов
/ 10 декабря 2011

Макрос создает фиктивный указатель на ClassName с reinterpret_cast, а затем преобразует его в BaseName с static_cast.

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

Diagram showing an example

Это полезно, только если вы делаете неприятные вещи низкого уровня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...