Я отправляю структуру по сети
Стоп.Возможно, некоторые со мной не согласятся (на практике вы видите, что многие проекты делают это), но struct
- это способ размещения вещей в памяти - это не механизм сериализации.Используя этот инструмент для работы, вы уже связываете себя с кучей непереносимых допущений.
Конечно, вы можете подделать его такими вещами, как прагмы и атрибуты дополнения структуры, но - можетевы действительно?Даже с этими непереносимыми механизмами вы никогда не знаете, какие причуды могут появиться.Я вспоминаю работу в кодовой базе, где использовались «упакованные» структуры, а затем внезапно перенес ее на платформу, где доступ должен был быть выровнен по словам ... даже если это был номинально тот же компилятор (таким образом, поддерживавший те же проприетарные расширения), которые он создавалдвоичные файлы, которые разбились.Любая боль, которую вы получаете по этому пути, вероятно, заслуживает, и я бы сказал, что принимайте ее, только если вы можете быть на 100% уверены, что она будет работать только в данном компиляторе и среде, и это никогда не изменится.Я бы сказал, что безопаснее всего написать правильный механизм сериализации, который не позволяет создавать структуры вокруг границ процесса.