Re[5]: Дурацкий вопрос
От: so5team https://stiffstream.com
Дата: 26.11.24 07:51
Оценка: 11 (1) +1
Здравствуйте, kov_serg, Вы писали:

_>>>Хотелось шаблон параметризировать смещенем поля структуры


V>>https://en.cppreference.com/w/cpp/types/offsetof


_>Не. Надо &Type::field -> offset

_>
_>get_offset<&Type::field>();
_>


Так ведь указатель на член -- это же не смещение. Т.е. смещение для одного и того же члена может быть разным в зависимости от объекта, к которому затем этот указатель применяется:
#include <iostream>

struct A {
    int m_a{};
};

struct B : public A {
    int m_b{};
};

struct C {
    int m_c{};
};

struct D : C, A {
    int m_d{};
};

int main()
{
    using FieldPtr = int A::*;

    B b;
    b.m_a = 1;
    D d;
    d.m_a = 2;

    FieldPtr p1 = &A::m_a;

    std::cout << "B: " << b.*p1 << ", offsetof: " << offsetof(B, m_a) << std::endl;
    std::cout << "D: " << d.*p1 << ", offsetof: " << offsetof(D, m_a) << std::endl;
}
Отредактировано 26.11.2024 8:00 so5team . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.