通过折叠表达式简化返回值检测


返回值检查

比如在启动服务器或者客户端的时候编写init函数, 此时需要依次去config目录加载对应的配置,log的配置等等,在这个时候如果一行行写的话就会有如下代码:

error_t result{};
result = check1();
if (result != error_t::ok) {
  return result;
}
result = check2();
if (result != error_t::ok) {
  return result;
}
result = check3();
if (result != error_t::ok) {
  return result;
}
result = check4();
if (result != error_t::ok) {
  return result;
}
return error_t::ok;

虽说也可以但是终归是比较丑陋,如果应用折叠表达式的话可以写成如下形式:

return checked_exec(
  error_t::ok,
  [&] { return check1(); },
  [&] { return check2(); },
  [&] { return check3(); },
  [&] { return check4(); });

对应的check_exec可以写成:

template <typename R,
          typename... Fn>
R checked_exec(const R& expected,
               Fn&&... fn)
{
  R result = expected;
  (void)(((result = forward<Fn>(
             fn)()) == expected) &&
         ...);
  return result;
}

当然,前提是不传入参数,传入参数不同的话就需要额外编写。


文章作者: JoyTsing
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 JoyTsing !
评论
 上一篇
Cpp工程实践必备技能 Cpp工程实践必备技能
现代工程的一些不教但是你得知道的东西
2024-03-06
下一篇 
vscode CMake Tools 传递命令行参数 vscode CMake Tools 传递命令行参数
vscode调试C++程序时,有时需要给程序传递命令行参数。这么说,如果是用F5去运行的话那么则是另外一套配置配置方法,但现在最近已经习惯了CMake一套工具链,同时懒得跳到命令行里面去打make或者运行脚本。这种时候,通常做法是配置lau
2024-01-20
  目录