Я использую шаблоны для своей структуры, например:
#pragma pack(push, 1)
template <typename T>
struct S
{
T t;
inline void Set(const T& val) { t = val; }
}
#pragma pack(pop)
T может быть float, int, short или char [10], char [1] или char [2] (желательно любой длины).
Хотя приведенное выше, кажется, довольно хорошо работает для интегральных типов, у меня возникли трудности с реализацией части char [n] в этом: