You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Иногда полезно иметь возможность сохранить сообщение с динамическими полями. Есть предложение написать класс обертку над сообщением и сделать специализации функций сериализации и парсинга:
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 что думаете? Может есть другие пути?
The text was updated successfully, but these errors were encountered: