Anonymous
Я ищу подходы к именованию исключительных ситуаций, хочу выработать более или менее строгую систему
Anonymous
Чтобы именование ошибок не было размазанным
Anonymous
Это, конечно, логично. Но ещё логичнее было бы именовать эти внесистемные, неправильные ситуации.
Billy
Я ищу подходы к именованию исключительных ситуаций, хочу выработать более или менее строгую систему
Друг мой, как говорил мне мой научный руководитель, а он крайне уважаемый человек в сообществе, классификация чего бы то ни было - оно занятие крайне неблагодарное :D
Anonymous
Я к тому, чтобы использовать какой-то базовый набор слов при именовании исключений. Причем слова сами по себе должны быть кардинально простыми Все будет смотреться единообразно и красиво только если будут какие-то строгие правила...
Matwey
По-моему сейчас будет спам
Matwey
Этот чел подписался на все чаты
D.
Нет, не будет. Я просто подписаля и все.
Anonymous
о том и речь. Только проблема в "стандарте именований", если можно так сказать
Anonymous
а точнее в его отсутствии
Matwey
Ну так можно про любые классы сказать
Matwey
Нет стандарта именования классов в программе
Matwey
coding style устанавливается волюнтаристическим образом
Matwey
а иногда и не устанавливается
Anonymous
@zamazan4ik а как ты именуешь кастомные исключения? (если нужно дать возможность их поймать и обработать по-особому в catch)
Anonymous
я в курсе как делать кастомные классы для исключений
Anonymous
ДА
Anonymous
ну тогда давай вот я примеры исключительных ситуаций приведу, а ты аргументируешь их именования?
D.
Мой вопрос я не знаю отвечает ли он требованиям чатика. Допустим есть статический метод в A A newObject(){ return B; } A- абстрактный класс B наследует и реализует A. Как правильно вернуть объект B из функции A.
Anonymous
Почитать про указатели?
D.
Что за тег для кода ?
доня.
Nikita
/iqtest@FailsBot
доня.
ты бы хоть смотрел что кидаешь
ну я уж не говорю там перевести "Exceptions to Naming Rules" и понять что оно не имеет отношения к программным исключениям.
Anonymous
Есть два класса: Window и Context Context - это окружение, без которого нельзя работать с командами OpenGL Window - это окно, в которое можно рисовать что-либо (Context хранится внутри Window) 1)Передали в Window нулевые или отрицательные значения ширины/высоты (invalid_argument, допускаю) 2)ОС отказалась создавать окно (WindowCreationException? Но тогда почему мы отдельно вынесли invalid_argument?) 3)Неудача в создании контекста (либо бзик ОС, либо аппаратура не соответствует требованиям) 4)Недостаточно памяти для создания текстуры (на видеокарте)
Anonymous
Хотя опять же, если есть WindowCreationException и "ContextCreationException", то "ContextCreationException" заворачивается в WindowCreationException? А вот если мне надо понять, что произошел провал именно на этапе создания контекста?
Anonymous
да
Anonymous
у меня больше идеологические проблемы, скажем так
Anonymous
спасибо, гляну
так стоп, я этот кодинг стайл читал, там про именования исключений толком ничего не сказано
Aidar
1) unsigned
Anonymous
Более того, написано "We do not use C++ exceptions."
Aidar
2) какойнить system_error
Anonymous
1) unsigned
может быть нулем
Anonymous
2) какойнить system_error
тоже самое для контекста? Тогда как их различать-то?
Aidar
может быть нулем
это ошибка? не думаю
Aidar
тоже самое для контекста? Тогда как их различать-то?
отнаследуйтесь если вам надо, но зачем их различать?
Anonymous
это ошибка? не думаю
сильно зависит от ОС. Идеологически - ошибка
Aidar
не настолько ошибка чтобы ее отдельно ифать
Aidar
кидайте ошибку создания окна
Anonymous
отнаследуйтесь если вам надо, но зачем их различать?
Чтобы из-вне дать возможность разобраться в чем дело и пофиксить/дать более подробный вывод ошибки
Anonymous
но если получение детального сообщения ошибки - затратная операция, то что делать?
Aidar
проброс исключения это уже значит что чтото пошло не так
Aidar
и затратная операция будет не частой
Aidar
в идеале никогда не вызываться
Aidar
если у вас это поведение не выполняется значит вы делаете чтото не так
Aidar
попахивает джаваспагетти немного
D.
Мой вопрос я не знаю отвечает ли он требованиям чатика. Допустим есть статический метод в A A newObject(){ return B; } A- абстрактный класс B наследует и реализует A. Как правильно вернуть объект B из функции A.
~~~ A A::newObject(){ return B;} ~~~ A-абстрактный класс (static A newObject() ) B- класс который наследует A( class B::public A) Я не понимаю как правильно вернуть объект B из функции А. Если вариант наверху он говорит "нельзя испольвотать функцию возращающая абстрактный класс " Варианты, который я понял читая из инета это ~~~ A& A::newObject(){ return new B;} ~~~ Тогда придется делать delete( Еще один вопрос могу ли внутри класса сделать ~~~B B::del(){delete this;}~~~ ?). Как можно вернуть объект B?( я знаю вариант с умными указателями, но можно без них ).
Anonymous
Мм... Ну да, есть немного. Просто я многие вещи рассматириваю с точки зрения программирования графики Валидность переданных аргументов можно проверить самому (и довольно быстро!), но вот если ф-ция начинает работать неисправно - тут уже сложнее. Можно получить код ошибки, но чтобы получить описание ошибки - нужно выделить массив символов и повторно стучаться к OpenGL за подробным выводом. Я боюсь, что на каждую операцию пойдет дичайший оверхед Была и другая идея - через callback кешировать исключения в Context, но тогда будет сложно определить в каком же месте произошла исключительная ситуация. В рамках OpenGL, чтобы определить какая ф-ция и в какой строке дала сбой, надо каждый раз вызывать проверку наличия ошибки ._. Можно конечно дебагером попрыгать и выявить это место, но что делать если лог ошибок кидает пользователь программы? Сам факт наличия ошибки (не зная точного контекста возникновения) ни о чем не скажет, это аля мистика
Anonymous
(я про ф-ции OpenGL уже)
Anonymous
но это просто в качестве примера. Не знаю что делать
Anonymous
нет-нет, погоди
Anonymous
сейчас объясню
Anonymous
в рамках OpenGL есть два способа обработки ошибки: 1)после вызова ф-ции OpenGL вызвать ф-цию glGetError 2)внешним callback'ом просто вывести ошибку (но тогда теряется связь с кодом, неизвестно где именно она произошла) Если делать как в (1), то получаем дичайший оверхед, причем даже если ошибки как таковой и нет. Оверхед на каждую ф-цию OpenGL Если делать как в (2), то оверхеда как в (1) нет, но страдает информативность (неизвестно какая именно строка кода дала сбой)
Aidar
в 2к17 валидация только при дебаге юзается
Aidar
она существенно замедляет
Anonymous
в 2к17 валидация только при дебаге юзается
огл сильно зависит от железа, на котором исполняется программа. На разных видеокартах от разных производителей поведение тоже может быть разным. Отключить полностью - самоубийство.
Aidar
тем не менее
☕️
а в колбеке на обработку ошибки бектрейс почему не собрать?
☕️
колбеке в 2017?
опенГЛ как бы
Aidar
короче
☕️
мы все еще в этом контексте)) или он стал тру ООП?))
Aidar
делай чем угодно
Aidar
но делай отключаемым
Deleted Account
опенГЛ как бы
ох уж этот легаси
☕️
ох уж этот легаси
на этом легаси сейчас все невиндовое работает :/
Anonymous
ох уж этот легаси
DirectX небось тоже труЪ ООП заделался?
Aidar
ох уж этот легаси
ахах это же чат плюсов
Aidar
DirectX небось тоже труЪ ООП заделался?
я бы сказал что vulkan для плюсов тру довольно таки
Aidar
оберточка