C. "Перегрузка" функции для массивов разной длины
Есть структура
typedef struct
{
int serviceRef;
char buffer[128];
} WriteBlob;
Есть функция, которая внутри обрабатывает эту структуру ( void HandleBlob(WriteBlob* blob)). Проблема в том, что объект этой структуры передается по сети. И 128 байтов не всегда нужно передавать, т.к. полезной нагрузки может быть 20 байтов, а передается все равно 128. Так вот вопрос, как реализовать работу этой структуры\функции для разных размеров буфера?
Например, я сделаю структуры WriteBlob128, WtireBlob80, WriteBlob64, WriteBlob32, WriteBlob16. Но тогда, мне нужно будет добавлять столько же реализаций функции для каждого из типов.
Можно как-нибудь, с помощью макросов, сделать так, чтобы пользователь определял структуру, например, WriteBlob32, вызывал функцию (макрос) HandleBlob, а компилятор уже сам решит, на основе переданного параметра, какую функцию вызывать...а еще лучше, чтобы пользователь создает объект WriteBlob64, а компилятор делает из этого структуру.
typedef struct
{
int serviceRef;
char buffer[64];
} WriteBlob;
Язык - С 99. Дополнительное требование - размер структуры должен быть известен на момент компиляции.
Ответы (1 шт):
Популярный подход в winapi - первым полем в структуре лежит её размер в байтах.