gpt4 book ai didi

c++ - C++ : ScopeGuard vs return check and exception handling?

转载 作者:行者123 更新时间:2023-12-03 09:11:50 31 4
gpt4 key购买 nike

考虑这些代码在现实生活中发生。

库代码具有一个名为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的一种好习惯吗?在这种情况下,要求库代码不要抛出,如果用户指定了将抛出的函数回调,那么错误处理是一个问题吗?

最佳答案

如果必须这样做,可以将实际工作移到一个辅助函数中:

bool log_on_impl() { /* real work here*/ }

bool log_on() {
bool success = log_on_impl();
callback(success);
return success;
}

这样, log_on_impl可以尽早恢复其心脏的内容。回调仍将使用正确的值调用。

关于c++ - C++ : ScopeGuard vs return check and exception handling?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56711834/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com