Сообщение Re[32]: offsetof() без UB от 28.03.2025 14:25
Изменено 28.03.2025 14:26 rg45
Re[32]: offsetof() без UB
Здравствуйте, kov_serg, Вы писали:
_>Еще вариант где мешает. Если бы был int D::* то
_>
_>То есть что бы работало в общем виде придётся писать ptr_to<D,&D::a>
_>ps: И тогда можно вместо offset спокойно использовать этот указатель, при желании преобразовав его в intptr_t
Твою мотивацию я понял. Тем не менее, несмотря на определенные неудобства, концептуально более чистым мне видится текущая имплементация, когда выражения &D::a и &A::a имеют один и тот же тип и одно и то же значение. В то же время, достаточно веских оснований для того, чтобы отстаивать свою позицию у меня нет. Скорее всего, это просто привычка и закреплённый временем и практикой стереотип.
_>Еще вариант где мешает. Если бы был int D::* то
_>
_> int* (*p1)(D*)=ptr_to<&D::a>; // я бы мог писать так
_> int* (*p2)(A*)=ptr_to<&D::a>; // а пиходится так
_>
_>То есть что бы работало в общем виде придётся писать ptr_to<D,&D::a>
_>ps: И тогда можно вместо offset спокойно использовать этот указатель, при желании преобразовав его в intptr_t

Твою мотивацию я понял. Тем не менее, несмотря на определенные неудобства, концептуально более чистым мне видится текущая имплементация, когда выражения &D::a и &A::a имеют один и тот же тип и одно и то же значение. В то же время, достаточно веских оснований для того, чтобы отстаивать свою позицию у меня нет. Скорее всего, это просто привычка и закреплённый временем и практикой стереотип.
Re[32]: offsetof() без UB
Здравствуйте, kov_serg, Вы писали:
_>Еще вариант где мешает. Если бы был int D::* то
_>
_>То есть что бы работало в общем виде придётся писать ptr_to<D,&D::a>
_>ps: И тогда можно вместо offset спокойно использовать этот указатель, при желании преобразовав его в intptr_t
Твою мотивацию я понял. Тем не менее, несмотря на определенные неудобства, концептуально более чистым мне видится текущая имплементация, когда выражения &D::a и &A::a имеют один и тот же тип и одно и то же значение. В то же время, достаточно веских доводов для того, чтобы отстаивать свою позицию у меня нет. Скорее всего, это просто привычка и закреплённый временем и практикой стереотип.
_>Еще вариант где мешает. Если бы был int D::* то
_>
_> int* (*p1)(D*)=ptr_to<&D::a>; // я бы мог писать так
_> int* (*p2)(A*)=ptr_to<&D::a>; // а пиходится так
_>
_>То есть что бы работало в общем виде придётся писать ptr_to<D,&D::a>
_>ps: И тогда можно вместо offset спокойно использовать этот указатель, при желании преобразовав его в intptr_t

Твою мотивацию я понял. Тем не менее, несмотря на определенные неудобства, концептуально более чистым мне видится текущая имплементация, когда выражения &D::a и &A::a имеют один и тот же тип и одно и то же значение. В то же время, достаточно веских доводов для того, чтобы отстаивать свою позицию у меня нет. Скорее всего, это просто привычка и закреплённый временем и практикой стереотип.