LINUX.ORG.RU

История изменений

Исправление mittorn, (текущая версия) :

Можно было бы сделать перегружаемые операторы sizeof и offsetof. Тогда доступ к полю элемента был бы согласно перегруженному offsetof и это решает всю «магию». Только я не совсем понимаю, какой синтаксис должен быть у перегрузки offsetof - ведь в этом макросе передаётся имя элемента в виде идентификатора. Возможно что-то вроде:

size_t operator offsetof(field3)() const
{return offsetof(field2) + field1;}

где тело offsetof будет являться частью имени оператора с соответствующей семантикой.
Тогда если sizeof не константный - то в целом объект ведёт себя как объект с flexible array member - нельзя использовать нигде, где требуется статическая аллокация и где sizeof используется в статическом контексте, зато вокруг этого всего смогут работать всякие сериализаторы и динамические аллокаторы просто получая размеры в рантайме.
Так же такой оператор может генерироваться автоматически если размер элемента field[] в структуре задан как зависимость от другого элемента в структуре: char field2[field1];

Исправление mittorn, :

Можно было бы сделать перегружаемые операторы sizeof и offsetof. Тогда доступ к полю элемента был бы согласно перегруженному offsetof и это решает всю «магию». Только я не совсем понимаю, какой синтаксис должен быть у перегрузки offsetof - ведь в этом макросе передаётся имя элемента в виде идентификатора. Возможно что-то вроде:

size_t operator offsetof(field3)() const
{return offsetof(field2) + field1;}

где тело offsetof будет являться частью имени оператора с соответствующей семантикой.
Тогда если sizeof не константный - то в целом объект ведёт себя как объект с flexible array member - нельзя использовать нигде, где требуется статическая аллокация и где sizeof используется в статическом контексте, зато вокруг этого всего смогут работать всякие сериализаторы и динамические аллокаторы просто получая размеры в рантайме

Исходная версия mittorn, :

Можно было бы сделать перегружаемые операторы sizeof и offsetof. Тогда доступ к полю элемента был бы согласно перегруженному offsetof и это решает всю «магию». Только я не совсем понимаю, какой синтаксис должен быть у перегрузки offsetof - ведь в этом макросе передаётся имя элемента в виде идентификатора. Возможно что-то вроде:
```
size_t operator offsetof(field3)() const
{return offsetof(field2) + field1;}
```
где тело offsetof будет являться частью имени оператора с соответствующей семантикой.
Тогда если sizeof не константный - то в целом объект ведёт себя как объект с flexible array member - нельзя использовать нигде, где требуется статическая аллокация и где sizeof используется в статическом контексте, зато вокруг этого всего смогут работать всякие сериализаторы и динамические аллокаторы просто получая размеры в рантайме