Re[6]: api design: return code or exception - formal criteri
От: Andrew S Россия http://alchemy-lab.com
Дата: 28.08.09 11:21
Оценка:
J>>>Так что правильный путь, имхо — это дать возможность пользователю самому решить, что ему нужно, например, как делает boost.asio (можно и по-другому делать).

AS>>Но, имхо, не для каждого интерфейса. Либо делать 2 разных интерфейса с возможность move-upgrade одного в другой...

AS>>Вот этого бы не хотелось, на самом деле.

ЮЖ>Если модификация api невозможна, то можно такие варианты рассмотреть:

ЮЖ>
// Дано:
ЮЖ>result api::f1(); // все nothrow
ЮЖ>result api::f2();
ЮЖ>result api::f3();

ЮЖ>// использование

ЮЖ>checked_result r(error_code1 | error_code2);  
ЮЖ>r = api::f1();
ЮЖ>r = api::f2();
ЮЖ>r = api::f3();
ЮЖ>


ЮЖ>Объект checked_result в операторе присваивания проверяет аргумент на присутствие error_code1 или error_code2, и в случае обнаружения кидает исключение. Либо просто использует что-то вроде 'if(FAILED(hr)) throw ...'.


ЮЖ>Другой вариант — опять nothrow api, + легкие обертки-функторы:


Спасибо за ответ.
Да, про это все тоже думалось. В данном случае надо уменьшить бардак в коде, такие подходы его, на мой взгляд, поощряют — появляется куча условий на довольно высоком уровне. В общем, смысл от исключений тогда почти теряется. В общем, от исключений совсем отказываться не хочется, надо просто регламентировать ситуации...
http://www.rusyaz.ru/pr — стараемся писАть по-русски
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.