Здравствуйте, maks1180, Вы писали:
M>Мне нужно получить адреса объекта по адресу члена этого объекта. Планирую это делать через offsetof.
M>1) Есть ли другие способы ?
M>2) Я не совсем понял в описании кажется, что с ним будут проблемы в C23 ? Насколько надёжно и правильное это решение ?
M>3) gcc генерирует warning если в классе есть виртуальные функции. Но код генерирует правильный с учётом указателя на v-table. В чём тут дело ?
Макрос offsetof работает в классах со стандартной разметкой.
При добавлении виртуальных функций, а ещё с возможностью множественного наследования компилятору сложно определить, что вам нужно
Начиная с C++17 компилятор [
url-https://en.cppreference.com/w/cpp/types/offsetof]может, но не обязан,[/url] поддерживать для классов с виртуальной таблицей.
Как мне кажется лучшим вариантом будет найти способ убрать виртуальную функцию где требуется offsetof.
Или пользоваться только компиляторами поддерживающими данную функциональность если нет другого варианта.