S>Сетевой бинарный пакет. С помощью методов устанавливаем удобным образом отдельные части пакета — как то версия, тип пакета и пр. Но так же должна быть возможность получить данные пакета целиком для отправки (или предварительного шифрования).
У меня знакомый делал подобную задачу. Задаётся type_id константой, задаётся низлежащий тип, так же может быть вектор подобных значений. Он её делал как тестовое. У него всё вычислялось в компайл-тайме, и вообще, код бы на порядок, не, на два, лучше. За день вроде сделал.