|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||||||
Virtual и noreturn23.02.2015, 19:57. Показов 11051. Ответов 55
Метки нет (Все метки)
Возможно ли подружить virtual и noreturn? Пишу:
1
|
||||||
| 23.02.2015, 19:57 | |
|
Ответы с готовыми решениями:
55
Protected abstract virtual base pure virtual private destructor Какая разница между "void virtual" и "virtual void"? |
|
19506 / 10109 / 2463
Регистрация: 30.01.2014
Сообщений: 17,833
|
||
| 25.02.2015, 10:49 | ||
Сообщение было отмечено Renji как решение
РешениеАтрибуты в сигнатуру водят? На данный момент ответ - нет. Нарушений каких-либо со стороны компилятора нет. Виртуальная функция в наследнике - это другая функция, [[noreturn]] на ее не распространяется, точно так же как это не распространяется, например, на gcc-шные __attribute__ ((<что-то>)). Вот и весь ответ. А проверить тот факт, что компиляторы таки это дело отслеживают, можно просто: добавить final и убедиться, что warning пропал. Как только компилятор получил гарантии, что никто не будет более переопределять эту функцию, то сразу убрал warning. Есть факт, ну и чего с ним спорить теперь? Если хочешь изменить положение вещей - можно оформить предложение в комитет, благо есть возможность.
0
|
||
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
|||||||
| 25.02.2015, 12:18 | |||||||
|
Не по теме: Ну наверное потому что это не помощь, а скорее медвежья услуга, от неё больше вреда чем пользы. Я конечно понимаю, что на любом языке можно писать как на фортране, но другим-то зачем это советовать? Чтобы уж совсем не оффтопить, скажу, что топикстартер все правильно делает, нефиг копипастить. Напишу еще один довольно известный приемчик для удобной работы с исключениями, вдруг кто не знает:
0
|
|||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||
| 25.02.2015, 13:45 | |||||||
|
Детали: Если вам известно, что эксепшен является наследником const std::exception, то нет проблемы разрезолвить его в ловушке вида: catch( const std::exception& ex ), что делает void handle() избыточным. Ловушки вида catch( ... ) используется в случаях: 1. Когда точный тип эксепшена не известен. (а значит не существует предусмотренного обработчика на этот случай) Для эвристического анализа ситуации, в отказоустойчивых системах. 2. Когда нужно отложить обработку всех исключений на более поздний срок: http://rextester.com/IUVTX48212
0
|
|||||||
|
19506 / 10109 / 2463
Регистрация: 30.01.2014
Сообщений: 17,833
|
|||
| 25.02.2015, 14:16 | |||
|
Конкретно вот это:
0
|
|||
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
|||
| 25.02.2015, 14:27 | |||
|
в различных местах без копипасты.
0
|
|||
|
19506 / 10109 / 2463
Регистрация: 30.01.2014
Сообщений: 17,833
|
||||||||
| 25.02.2015, 15:05 | ||||||||
|
И почему нельзя написать так?
0
|
||||||||
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
|||
| 25.02.2015, 15:18 | |||
|
0
|
|||
|
19506 / 10109 / 2463
Регистрация: 30.01.2014
Сообщений: 17,833
|
||
| 25.02.2015, 15:54 | ||
|
Но лично я (лично я) стремился бы к обобщению на уровне иерархий исключений, а не на уровне обработчиков. И мое мнение, что необходимость присутствия совершенно одинаковых портянок из catch`ей (что ты предлагаешь вынести в функцию как решение) в разных частях программы тонко намекает на некую архитектурную проблему. (На всякий случай, вот вопросы, которые помогут понять ход моих мыслей: 1) если действия разные, почему у них одинаковая портянка catch`ей? 2) если действия одинаковые, то почему они в разных частях программы?) Повторюсь, я не экстремист, пропогандировать свое видение в массы не буду. Это лишь мнение.
2
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 26.02.2015, 03:27 | |||
|
однако, он использует это совсем для другой цели: размазывает одинаковые обработки по всему коду проекта. что не есть хорошо.
0
|
|||
|
19506 / 10109 / 2463
Регистрация: 30.01.2014
Сообщений: 17,833
|
|
| 26.02.2015, 09:00 | |
|
0
|
|
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
|||||||
| 26.02.2015, 16:12 | |||||||
Есть какие-нибудь предложения?
0
|
|||||||
|
19506 / 10109 / 2463
Регистрация: 30.01.2014
Сообщений: 17,833
|
||||||
| 26.02.2015, 17:10 | ||||||
|
Voivoid, насколько я вижу, ты предлагаешь учесть в этой задаче следующие ограничения:
1) Данный код - библиотека, которая не имеет права кидать исключения, либо не имеет права кидать исключения не являющиеся наследниками std::exception. Поэтому мы не можем вынести уровень обработки этих ситуаций выше методов update_from_database и store_to_database 2) Вытекает из первого. DBException - не наследник std::exception. 3) По каким-то не зависящим от нас причинам мы не можем заменить DBException на аналогичного наследника std::exception, либо полностью заменить библиотеку работы с DB на другую. Если я все правильно обозначил выше, то соображения будут такие: Я достаточно давно же работаю с legacy и не испытываю никаких иллюзий по поводу таких ситуаций. В том плане, что прекрасно понимаю откуда тут могут расти ноги и какими узлами могут быть связаны руки программистов. Поэтому в этом ключе мне не кажется это решение (постом выше) таким уж страшным (но это не дает нам повода думать, что с архитектурой тут все в порядке). Какие еще варианты я наблюдал при решении подобных ситуаций (в порядке убывания популярности): 1) Пишем макрос. Запихиваем портянку catch-й туда. Называем макрос CATCH_ALL и радуемся. 2) Делаем трансформацию DBException -> db_exception (наследник std::exception) и решаем задачу логирования единообразно, без портянок, на основе общности исключений. Потребует обертки оригинально API, который кидает кривые исключения, для обеспечения этого. 3) Твое решение с функтором. Не смотря на то, что ты назвал его сомнительным (в этой задаче), есть варианты где оно хорошо смотрится и частично снимает похожие проблемы. Для второго варианты код выглядел бы так:
2
|
||||||
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
|||||
| 27.02.2015, 09:48 | |||||
![]()
0
|
|||||
|
19506 / 10109 / 2463
Регистрация: 30.01.2014
Сообщений: 17,833
|
|||
| 27.02.2015, 13:51 | |||
|
0
|
|||
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
|||
| 27.02.2015, 14:05 | |||
Тут скорее всего вряд-ли уже чем поможешь.
0
|
|||
|
19506 / 10109 / 2463
Регистрация: 30.01.2014
Сообщений: 17,833
|
|||
| 27.02.2015, 14:18 | |||
|
Ну я понял. Ты говоришь о том, что код написан так, что уровни слабо заизолированы друг от друга. И если при выполнении запроса к базе, после запроса какая-то вспомогательная система тоже дает сбой, то это в конечном итоге влияет на всю транзакцию и ее придется откатывать. Добавлено через 2 минуты В целом я не считаю, что ты не прав (если это имеет для тебя значение). Т.е. мотивация и вариант решения мне понятны и не вызывают отторжения. Просто есть ощущение, что можно лучше
0
|
|||
| 27.02.2015, 14:18 | |
|
virtual PC virtual Virtual в С++ Virtual Wi Fi. virtual pc Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|