Я знаю это sizeof
вычисление времени компиляции, но это кажется странным мне: компилятор может взять или имя типа или выражение (из которого он выводит тип). Но как Вы определяете тип в классе? Кажется, что единственный путь состоит в том, чтобы передать выражение, которое кажется довольно неуклюжим.
struct X { int x; };
int main() {
// return sizeof(X::x); // doesn't work
return sizeof(X()::x); // works, and requires X to be default-constructible
}
Альтернативный метод работает без использования конструктора по умолчанию:
return sizeof(((X *)0)->x);
Можно обернуть его в макрос, чтобы он лучше читался:
#define member_sizeof(T,F) sizeof(((T *)0)->F)
Вот решение без неприятного нулевого указателя размытия;)
struct X { int x; };
template<class T> T make(); // note it's only a declaration
int main()
{
std::cout << sizeof(make<X>().x) << std::endl;
}
А как же смещение
? Посмотрите здесь . Также посмотрите здесь , который сочетает в себе как размер
, так и смещение
в макросе.
Надеюсь, это поможет.