GCC компиляторов позволяет объявить некоторые, как:рамка сообщение с переменным размером
struct Msg : public BaseMsg // BaseMsg could contain the message code and common stuff to all the diferent messages frames
{
// some class state stuff whose layout must be contiguous
size_t len; // length of variable data
char buffer[0]; // here one could put data of variable size
};
В прошлом, я использовал этот стиль для того, чтобы управлять сообщениями кадров. Например, я мог бы сделать:
Msg * msg = (Msg*) malloc(sizeof(Msg) + additional_length);
memcpy(msg->buffer, /* some src addr for additional data */, additional_length);
Таким образом, я мог бы поставить постоянное состояние сообщения и некоторые дополнительные смежные данных для всего сообщения, размер которого часто является переменным, в объекте типа Msg
. Затем я выполняю отправку/получение один раз.
Это не тривиальный метод, но в моем скромном опыте более кратким, понятным и эффективным способом, чем другие альтернативы (отправка двух отдельных сообщений и выполнение других трюков).
Ну, теперь я заинтересован в том, есть ли более эффективные методы или даже если есть шаблон дизайна или библиотека, которая упрощает решение таких проблем.
Заранее спасибо за внимание
Я думаю, что этот подход может сработать для вас. См. Обновление. –
Кажется, что 'BaseMsg' является частью пакета. Автор хочет построить пакет без вызова методов типа 'get_bytes()'. –