Re[2]: Набор исключений метода
От: developer  
Дата: 17.06.18 15:57
Оценка:
Здравствуйте, so5team, Вы писали:

Спасибо! Очень полезные советы! Хотел еще спросить — как средствами языка C++ выразить интерфейс класса, который бросает исключения?


namespace net {

class Reciever {
   Result recv_msg(Channel channel) // этот метод кидает исключение RecieveException
};

}


Как выразить то, что метод кидает исключения средствами C++?

Или описывать это в документации к классу? А если нету документации? А заказчику предоставляется библиотека (без исходных кодов). А даже если с исходными кодами, то заказчик что-ли будет изучать исходники, чтобы узнать какие исключения могут выбрасываться?
Отредактировано 17.06.2018 16:03 developer . Предыдущая версия . Еще …
Отредактировано 17.06.2018 16:00 developer . Предыдущая версия .
Отредактировано 17.06.2018 15:58 developer . Предыдущая версия .
Re[3]: Набор исключений метода
От: so5team https://stiffstream.com
Дата: 17.06.18 20:20
Оценка:
Здравствуйте, developer, Вы писали:

D>Хотел еще спросить — как средствами языка C++ выразить интерфейс класса, который бросает исключения?


В современном C++ вы можете только пообещать не бросать исключений вообще -- помечаете метод/функцию как noexcept.

Если noexcept нет, значит исключения могут вылетать. Какие? Этого вы знать не можете. Поэтому, кстати, лучше свои исключения наследовать от std::exception.

PS. noexcept не означает, что компилятор даст вам по рукам, если в noexcept методе/функции вы попробуете бросить исключение (или вызываете другие методы/функции, которые бросают исключения). Вы можете это сделать, но в случае возникновения исключения ваша программа будет прервана. Поэтому тот, кто вызывает noexcept методы/функции, может об исключениях из этих методов/функций не беспокоится.
Re[3]: Набор исключений метода
От: Maniacal Россия  
Дата: 19.06.18 10:20
Оценка:
Здравствуйте, developer, Вы писали:


D>Спасибо! Очень полезные советы! Хотел еще спросить — как средствами языка C++ выразить интерфейс класса, который бросает исключения?


namespace net {

class Reciever {
   Result recv_msg(Channel channel) throw (RecieveException); // или throw(...) для неопределённого круга исключений

}


Но такой синтаксис начиная с C++17 обещали сделать depricated. А Microsoft на него болт ложил с самого начала. Т.е. синтаксис разрешает, но честно предупреждает, что он его игнорирует..
Отредактировано 19.06.2018 10:23 Maniacal . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.