Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / C++ |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 3 вперед Ctrl→ все |
PetroNotC Sharp Member Откуда: Сообщений: 7556 |
bool Book::Save(inst::Abstract *top, const QString &full_path, QString *err) { QSaveFile out(full_path); out.open(QIODevice::WriteOnly | QIODevice::Truncate); QXmlStreamWriter xml(&out); WriteStartDocument(xml); top->Write(xml); xml.writeEndDocument(); const bool ok = out.commit(); if (!ok && err != nullptr) *err = QString("Failed to save as ") + full_path; return ok; } https://github.com/f35f22fan/Ods2/blob/master/ods/Book.cpp Вывод ошибок не параметром метода какие есть варианты? Я понимаю что try в плюсах не приветствуется. А так был бы вариант |
2 фев 21, 23:15 [22273523] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52887 |
Кем не приветствуется? Не знаю как у Qt, а выкинуть std::runtime_error в данном случае вполне нормальная идея. Posted via ActualForum NNTP Server 1.5 |
||
2 фев 21, 23:26 [22273534] Ответить | Цитировать Сообщить модератору |
petrav Member Откуда: Сообщений: 2850 |
Русский язык. 9 класс. Учебник
LOL. Язык программирования С++. Бьерн Страуструп
Тут я привёл целых два и не варианта, а два обязательных направления. ![]() PS: Я удивлён, что тебя поняли, потому что без коммента от Сибирякова я вообще не уразумел о чём ты пишешь. Сообщение было отредактировано: 2 фев 21, 23:32 |
||||||||||||
2 фев 21, 23:37 [22273538] Ответить | Цитировать Сообщить модератору |
White Owl Member Откуда: Сообщений: 12678 |
Qt может не кидать исключений - это да. И если следовать этой традиции (именно традиции "Qt без исключений"), то параметр QString *err это вполне нормально и кошерно. А если собрать Qt с исключениями, то будешь себе try-catch писать вполне стандартно, традиционно и по учебнику. Там конечно свои потенциальные проблемы вылезут, которые легко решаются дисциплиной программиста, но... Поэтому чаще всего Qt и живет без исключений. А варианты правильной работы и потенциальные проблемы читать тут: https://doc.qt.io/qt-5/exceptionsafety.html |
||||
3 фев 21, 00:04 [22273540] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52887 |
Поскольку он может собираться как динамическая библиотека - лучше ему этого не делать. Иначе всё становится очень сложно. Posted via ActualForum NNTP Server 1.5 |
||
3 фев 21, 01:20 [22273570] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7556 |
petrav, Не удивительно что не понял. Ты не работал с другими ЯП и вопросами по архитектуре. Задай, уточняй, это форум. |
3 фев 21, 07:00 [22273609] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7556 |
Qt может работать с исключениями, но - читал мнение самих разрабов что это не в приоритете. - они не выходят сами на уровень Application. Без перехвата руками на самом верху. - через либу *.so не переходят. Если не перехватить то молча все проглотится. В общем коряво. Если в плюсах std::runtime_error многие применяют, то могу попробовать. |
3 фев 21, 07:09 [22273611] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7556 |
Давайте сначала обзор вариантов. На вскидку придумал 3: 1. Глобальная переменная error 2. LastError WinApi 3. Логгер |
3 фев 21, 07:14 [22273612] Ответить | Цитировать Сообщить модератору |
crutchmaster Member Откуда: оттуда. Сообщений: 2235 |
Всё плохо. Возвращай { ret, err } как в гошечке. Сообщение было отредактировано: 3 фев 21, 07:21 |
||||
3 фев 21, 07:28 [22273613] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7556 |
Dimitry Sibiryakov, >Кем не приветствуется? ==
21896029 |
||
3 фев 21, 07:32 [22273614] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7556 |
crutchmaster, Гошечку не знаю. В яве, дельфи, шарпе проблем нет. |
3 фев 21, 07:33 [22273615] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7556 |
http://nomatter.ru/ru/qtconcurrent_and_exceptions |
||
3 фев 21, 08:01 [22273620] Ответить | Цитировать Сообщить модератору |
crutchmaster Member Откуда: оттуда. Сообщений: 2235 |
Я уже вижу как минимум одну проблему - многопоток, который будет затирать твой глобальный error. Логер - я хз, как ты будешь вылавливать из него исключения, а винапи - это вообще пошлятина, да и по сути тоже, что и глобальный error. Сообщение было отредактировано: 3 фев 21, 10:13 |
||||
3 фев 21, 10:18 [22273657] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7556 |
crutchmaster, Да. Про потоки, то тут одинаковые подходы с другими ЯП. Перехват внутри потока. Хотя, в шарпе с async await ловится снаружи try { listTree = await obj.getAsync(.... |
3 фев 21, 10:40 [22273666] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7556 |
crutchmaster, >Логер - я хз, как ты будешь вылавливать из него исключения, == метод логгера это вместо stringErrOut = sssssss Писать log.add(“xml атрибут аааааа не заполнен .. То есть исключений не будет вообще. |
3 фев 21, 10:59 [22273685] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7556 |
crutchmaster, Цель двоякая при парсинге xml - остановить если критическая ошибка типа версия не та - пройти весь файл документ и вывалить юзверю ошибки шаблона документа Договор или Накладная или... |
3 фев 21, 11:02 [22273689] Ответить | Цитировать Сообщить модератору |
AmKad Member Откуда: Сообщений: 5248 |
|
||||||
3 фев 21, 11:25 [22273711] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7556 |
AmKad, Там по ссылке ниже код приведен. Что одно от другого зависит. Формально слова разные. А логика кода вывернута шиворот навыворот. Разные концепции. Мне жаль. |
3 фев 21, 11:40 [22273722] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 50960 |
Топик будет не полным пока мы не обсудим costs на обработку exception. В сравнении с возвратом boolean. |
3 фев 21, 12:30 [22273746] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7556 |
mayton, Угу. Сишникам только дай про скорость поговорить)))) |
3 фев 21, 12:48 [22273757] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7556 |
mayton, Boolean нужен только при первом случае выше. А случаев два штуки. |
3 фев 21, 12:49 [22273759] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 50960 |
Если язык и библиотеки рекомендуют использовать исключения (Java/C#) для обработки непредвиденных ошибок - то надо использовать. Более того. Во многих языках с управляемой кучей процесс обработки ошибки тестно завязан на корректное освободждение ресурсов. Насчет С++ - сложно сказать является ли это общеупотребимой практикой. Это интересный вопрос. И почему например при создании GoLang полностью отказались от механизма исключений. И на что заменили. Тоже вопрос достойный обсуждения. |
3 фев 21, 12:59 [22273765] Ответить | Цитировать Сообщить модератору |
petrav Member Откуда: Сообщений: 2850 |
В С++ как обычно бардак, раздрай и подводные камни. Примерно как со строками. Программируя на Qt, конечно, можно использовать исключения. И в случае DLL тоже, но нужно уметь обходить подводные рифы. |
||||
3 фев 21, 13:09 [22273768] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52887 |
Всё перечисленное - языки программирования. Qt - фреймворк (библиотека). Почувствуй разницу. PS: Повторяю медленно: в библиотеке Qt исключения не приветствуются по вполне определённой причине - возможности динамической сборки. В языке программирования С++ с исключениями проблем нет. Сообщение было отредактировано: 3 фев 21, 14:01 |
||
3 фев 21, 14:00 [22273850] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7556 |
Dimitry Sibiryakov, Теорию я понял. Теперь по коду и практике. Выше ссылка как пишут с try в других ЯП. |
3 фев 21, 14:24 [22273872] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 3 вперед Ctrl→ все |
Все форумы / C++ | ![]() |