Anonymous
протобаф?
я выбрал msgpack, покуриваю protobuf, надо поискать хорошее сравнение)
Oleg
он норм. Особенно в плане скорости encode/decode
Kirill
У нас появилось зеркало в Matrix: #procxx:matrix.org
Кто-то решил поностальгировать по IRC, или я не шарю? :)
Nikolay
Лохманн норм либа, качественная
Vitaliy
Хочу написать свой тип-контейнер для значений ошибки. Например я возвращаю из функции объект типа Error<Message, Code>, который должен иметь методы message() и code() соответственно. Если убрать Message из шаблона, то и метод message() должен убраться. Такое за меня уже придумали ?
Dmitry
constexpr opengl
Это не оно? https://documentation.ef.gy/libefgy/
Aidar
Это не оно? https://documentation.ef.gy/libefgy/
это шутка была,прочитай контекст твоего вопроса
Vitaliy
Если нет, то как своё написать ? Только вариадики и множественное наследование в голову приходит.
Dmitry
это шутка была,прочитай контекст твоего вопроса
)))) нельзя так шутить, я чуть гугл не поломал
Dmitry
Хочу написать свой тип-контейнер для значений ошибки. Например я возвращаю из функции объект типа Error<Message, Code>, который должен иметь методы message() и code() соответственно. Если убрать Message из шаблона, то и метод message() должен убраться. Такое за меня уже придумали ?
Может лучше лог вместо этого использовать? А вдруг что полезное придется возвращать из функции, тогда ошибку придется аргументом тащить везде. Посмотри spdlog, мне кажется более правильная вещь, если не хочешь через исключения.
Vitaliy
enable_if не подходит?
Мне не требуется проверять есть ли метод у класса.
Vitaliy
Логом же ошибку не обработаешь) а вот исключения здесь в тему
У исключений есть огромный минус. Везде писать try catch надо, хотя можно легко обойтись и без них.
Aidar
Вроде
Aidar
А хотя нет нифига
Aidar
Лучше сфинае
Dmitry
Интересный способ обработки ошибок, пожалуй откажусь )
Тебе для обработки же текст сообщения же не нужен, только код. Сообщение люди читать должны. И причем разная детализация нужна в разных случаях. Поэтому хорошо бы чтобы пользователь сам мог детализацию определять. Ну а так, если по простому, тогда boost.exception
Dmitry
У исключений есть огромный минус. Везде писать try catch надо, хотя можно легко обойтись и без них.
Да? if(error) гораздо хуже, исключения можно хотябы в иерархию можно собрать и проверять там где это нужно, а не каждый вызов.
Anonymous
Кто нибудь опыт с Sfml имеет?
Aidar
Частые и ожидаемые надо делать возвратом
Dmitry
Ну есть 2 типа ошибок, если не три
Зависит от приложения.
Aidar
Зависит от конкретной семантики ошибки
Vitaliy
Aidar
Кто нибудь опыт с Sfml имеет?
Можешь спросить в @prographon
Vitaliy
И выглядит естественно: функция, результат.
Anonymous
Ок, спасибо
Vitaliy
Я просто думаю как использовать expected и что ему передавать в качестве ошибочного типа.
Vitaliy
Вот и думаю как такой контейнер написать на шаблонах.
Vitaliy
Зависит от приложения.
А если я пишу библиотеку и нет никакого приложения и логгирования ?
Dmitry
И выглядит естественно: функция, результат.
Есть такое, действительно эксепшен далеко разносит действие и обработку ошибки. Но с большими кодами нереально наладить обработку ошибок на месте вызова. Ну а допустим пользователь у тебя выберет игнорировать все ошибки... а если только критические... прикинь какие ифы у тебя при каждом вызове будут.
Timur
я выбрал msgpack, покуриваю protobuf, надо поискать хорошее сравнение)
Вот сравнение https://capnproto.org (правда, немного не то :) )
Vitaliy
Это все неважно, мой вопрос общий.
Vitaliy
Текст фиксирован для каждого кода?
В качестве ошибочного типа может быть любой тип. Нет конкретики. А может быть список типов.
Vitaliy
Вот мне нужен контейнер для такого списка ошибочных типов.
Dmitry
А какое действие подразумевается тогда над объектом?
Aidar
В бусте есть error code
Aidar
Чекни
Aidar
Что внутри
Dmitry
Контейнер для списка чего-попало это tuple
Dmitry
Но, ессно, список чего попало должен быть заранее всем известен
Dmitry
В любом другом случае у тебя твой «любой тип» ошибки должен быть наследником единого базового класса.
Vitaliy
В бусте есть error code
Вот это уже ближе.
Aidar
Вот это уже ближе.
Оно умеет выводиться как строка, а больше я про него ничего не знаю
Aidar
Но думаю можно что-нибудь оттуда ухватить
Dmitry
С чего бы? Джава?
Так там как раз сразу все классы наследники от суперкласса object. Не?
Aidar
Так там как раз сразу все классы наследники от суперкласса object. Не?
Вы ваще умеете в плюсцы? Понимаете что нельзя вернуть объект наследник по типу родителя?
Dmitry
Вообще нет
Вообще да, иначе тебе одна дорога в void* и reinterpret_cast
Vitaliy
Вообще у меня мысль такая: template <typename... ErrorTypes> class Error : public ErrorTypes... {}
Aidar
Вообще да, иначе тебе одна дорога в void* и reinterpret_cast
У нас тут статический полиморфизм
Vitaliy
Вообще да, иначе тебе одна дорога в void* и reinterpret_cast
Ты не понял моего вопроса совсем.
Aidar
Попробуй избежать тем более если передаешь левые типы
Vitaliy
Лучше не наследоваться
А как ещё получить методы из этих классов ?
Aidar
Можно завернуть в соответствующие обертки с композицией
Vitaliy
У Александринску это называется policy based design
Aidar
Методы плохо получать
Aidar
У левых классов
Aidar
Полиси не левые классы юзают
Aidar
А написанные по вполне определенным правилам
Dmitry
А как ещё получить методы из этих классов ?
А у тебя в любом из errortypes одни и те же методы что ли? Как ты их из дочернего класа собираешься вызывать?
Aidar
Короче лучше сделай композицию с кастом но по-моему ты изобретатаешь variant
Aidar
Скорее просто тапл
Constantine
кому вообще нужен vector<any> ? :)
Dmitry
Эни это и есть тупл