Считайте, что этот код происходит в реальной жизни.
В коде библиотеки есть функция с именем log_on (), она возвращает false при ошибке, true при успехе, но имеет слишком много ложных случаев.
Перед возвратом true / false необходимо вызвать указанное приложение функции обратного вызова. Так это выглядит:
bool log_on() {
// do something else
bool success = false;
scope_guard guard = [&success]() {
if (success) {
callback(success);
} else {
callback(false);
}
}
success = prepare_logon();
if (success) {
int rc = send_password();
if (rc == PASSWORD_ERR) {
return false;
}
}
if (!send_some_data()) return false;
success = true;
return true;
}
Цель состоит в том, чтобы получить слишком много возвратов и нужно вызывать некоторые функции обратного вызова, если возвращено значение true и false. Так что кто-то использует scopeguard для этого. Является ли это хорошей практикой, чтобы заменить проверку возврата с использованием scopeguard? И в этом случае код библиотеки требуется не выбрасывать, если пользователь указывает функцию обратного вызова, которая будет выбрасывать, поэтому обработка ошибок является проблемой?