размер полей структуры c ++ - PullRequest
1 голос
/ 06 марта 2012

У меня есть различные структуры c ++ в моей программе, я хочу, чтобы функция принимала одну из этих структур во входных данных и получала меня в массиве int, содержащем размер каждого поля входной структуры в байтах.мож кто-нибудь мне поможет?

Ответы [ 2 ]

3 голосов
/ 06 марта 2012

Это невозможно. 1 C ++ не имеет отражения .


1.Чтобы быть точным, невозможно сделать это автоматически языком.Конечно, вы можете отслеживать эти вещи вручную (как в предложении @ Nim).

1 голос
/ 06 марта 2012

Вот подход:

Используйте перегруженную функцию и при каждой перегрузке (для каждого struct) явно вставляйте размер каждого поля из этого struct в переданный массив (vector<size_t> - лучшая альтернатива).

Это фактически означает, что вам нужно жестко кодировать поля в каждой структуре в каждой перегрузке.

В качестве альтернативы, если вы счастливы использовать boost :: fusion,с помощью нескольких макросов вы должны иметь возможность продвигать структуру, которую затем можете повторить.Я разместил ответ с примером где-нибудь на SO, выкопает его ...

Вот оно: Повышение MPL для генерации кода для сериализации объектов? , показывает, как "продвигать "структуру, а затем перебирать членов.В этом случае он предназначен для сериализации, но его тривиально адаптировать, чтобы он возвращал размер каждого поля.Вы можете сделать это с MPL во время компиляции и сгенерировать последовательность MPL с размером каждого поля - но это немного сложнее - все зависит от того, чего вы действительно хотите достичь ...

...