Нельзя вычислять N во время выполнения, потому что и c -array (ваш buf
), и std::array
имеют информацию о размере в своем типе.
Также - использование union для (de) Сериализация не является хорошей практикой - размер вашей структуры будет зависеть от выравнивания, необходимого на данной машине, для которой она скомпилирована и т. д. Вы можете добавить атрибут packed
, чтобы преодолеть его, но у вас все еще есть много проблем с зависимостью платформы .
Что касается переменной длины - вам нужно написать собственный (де) сериализатор, который будет понимать и хранить / читать информацию о размере, чтобы воссоздать этот контейнер на другом конце.
Где вы хотите передать эти сообщения?