metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2009-02-15 06:22 pm

Qt, обработка ошибок

Что-то в примерах и документации нигде не вижу как обрабатываются ошибки, типа "в функцию передали кривой параметр", "вызов нижележащей ОС сдох, потому что ее сгрызли черви", итд.
Функции типа qWarning,qFatal, итд, вижу, есть. Вроде и обработка исключений какая-то есть, класс вроде Exception. Но вроде ж try-catch религия не позволяет в C++ юзать или я чего-то уже путаю?

Т.е. вообще, как принято обрабатывать ошибки в Qt?

[identity profile] zamotivator.livejournal.com 2009-02-16 09:29 am (UTC)(link)
C++ && boost.mpl && boost.fusion. Сам юзаю для метапрограммирования.
Lisp? Непопулярный.
Java - есть метапрограммирования. C# - тоже.
Ещё можно поглядеть на boost.spirit и boost.proto.

Не думаю, что это действительно частая нужная фича. Чаще это overkill архитектурный и реализации. Но два раза с нуждой столкнулся, c++&mpl&fusion хватило по уши.

[identity profile] metaclass.livejournal.com 2009-02-16 09:42 am (UTC)(link)
В С# и жабе метапрограммирования нет.

Лично мне метапрограммирование нужно для генерации гуя и адаптеров к БД на этапе компиляции - иначе там сотни строк тупого кода чисто присваивания(поле БД->поле объекта-поле экрана и обратно) , а ORM все это дело только ухудшает, добавляя к этим полям еще и поле описания связи объекта и БД.
Ну еще не помешало бы в xml, бинарные форматы и текст сериализовать с помощью метапрограммирования, но это можно и через рефлекшен сделать, хоть и криво.

[identity profile] zamotivator.livejournal.com 2009-02-16 10:12 am (UTC)(link)
В С# и жабе метапрограммирования нет
Хибернейты юзают кодогенерацию. Это является примером метапрограммирования?

[identity profile] metaclass.livejournal.com 2009-02-16 10:15 am (UTC)(link)
А, в таком смысле, да, есть.

[identity profile] zamotivator.livejournal.com 2009-02-16 10:14 am (UTC)(link)
Ну еще не помешало бы в xml, бинарные форматы и текст сериализовать с помощью метапрограммирования, но это можно и через рефлекшен сделать, хоть и криво.
Ну почему же криво, наоборот, пример адекватного использоавния. А если руками сериализацию писать - то это на любом языке можно, метапрограммирования тут не нужно.

Конкретно присваивания из гуя и обратно - необязательно метапрограммирование.
MVC, конкретно тот что в Qt это дело упрощает до безобразия.