-
Notifications
You must be signed in to change notification settings - Fork 13
Open
Description
Иногда полезно иметь возможность сохранить сообщение с динамическими полями. Есть предложение написать класс обертку над сообщением и сделать специализации функций сериализации и парсинга:
class Storage<T> {
T msg;
MemoryAllocator mem;
}
int parse<Storage<T>> (Storage<T> &msg, MessageInfo &info) {
}
Пока конкретный интерфейс не продумывал, но в планах пофантазировать.
Несколько тонких моментов, о которых можно подумать:
- В таком случае в общем-то передавать аллокатор/память отдельными аргументами возможно и нет смысла, тк он будет храниться внутри Storage.
- Запретить вызовы parse на динамических сообщениях, если при вызове не используется Storage. Можно как-нибудь разделить два варианта вызова, чтобы не тащить лишние аргументы на сообщениях без динамических полей.
- Когда будет очищаться аллокатор. Сейчас он конструируется при вызове parse и стирается после выхода, в итоге мануально его сбрасывать не нужно. Возможно в случае со Storage получится обойтись без создания объекта каждый раз и без мануального контроля. Из идей при вызове метода parse на Storage, вызывать функцию reset, которая будет сбрасывать аллокатор.
@ygorshkov @DrTon что думаете? Может есть другие пути?
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels