Вот подход:
Используйте перегруженную функцию и при каждой перегрузке (для каждого struct
) явно вставляйте размер каждого поля из этого struct
в переданный массив (vector<size_t>
- лучшая альтернатива).
Это фактически означает, что вам нужно жестко кодировать поля в каждой структуре в каждой перегрузке.
В качестве альтернативы, если вы счастливы использовать boost :: fusion,с помощью нескольких макросов вы должны иметь возможность продвигать структуру, которую затем можете повторить.Я разместил ответ с примером где-нибудь на SO, выкопает его ...
Вот оно: Повышение MPL для генерации кода для сериализации объектов? , показывает, как "продвигать "структуру, а затем перебирать членов.В этом случае он предназначен для сериализации, но его тривиально адаптировать, чтобы он возвращал размер каждого поля.Вы можете сделать это с MPL во время компиляции и сгенерировать последовательность MPL с размером каждого поля - но это немного сложнее - все зависит от того, чего вы действительно хотите достичь ...