LINUX.ORG.RU

[qt] каноническая обработка ошибок

 


0

1

Приветсвую тебя, о великий и ужастный ЛОР!

В ядре очень классная схема используется, с goto. Мне она понравилась. Стараюсь её использовать по мере надобности. Для сишных поделий - самое оно. Но вот в С++ конструктор то ничего не возвращает. Можно конечно сделать два уродских метода дополнительных init/deinit. Но это полный отстой. По-этому в конструкторах выбрасываю исключения.

Всё хорошо, пока не появились сигналы слоты. В Qt исключения использовать то можно, но через сигнал-слот они проходят только с применением грубого хака в QApplication. Не хочу так делать.

Собсвенно вопрос:
Допустим объект Аз генерил сигнал, подключеный к слоту в объекте Буки. Слот из Буки должен создать какую-то сущность, или просто что-то сделать, но возникает ошибка. Как объекту Бука сообщить объекту Аз об ошибке. Кроме как создавать ещё один сигнал-слот (типа connect(B, error(QString), A, onError(QString)) ничего в голову не приходит.

Как быть в общем случае? Спасибо.

Ответ на: комментарий от unC0Rr

Хотя оператор >>=, очевидно, ни к чему. Остаётся просто boost::variant в чистом виде.

unC0Rr ★★★★★
()
Ответ на: комментарий от nanoo_linux

В хаскеле Maybe имеет два конструктора: Nothing и Just a, где a - любой тип. Т.е. значение типа Maybe или пустое, или хранит в себе значение нужного тебе типа. Ситуация похожа на передачу ссылки на объект: если указатель нулевой, то ничего не передано, иначе это указатель на объект.

boost::variant позволяет хранить в себе значение одного из двух типов. Для реализации Maybe созданы классы Nothing и Just, при получении значения типа Maybe проверяется, можно ли получить из него указатель на Nothing, и если нет - значит там хранится значение класса Just, иначе - ничего.

unC0Rr ★★★★★
()
Ответ на: комментарий от dave

Кстати да, совсем забыл о такой возможности, спасибо. Только запутал топикстартера монадами :)

unC0Rr ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.