相关疑难解决方法(0)

你如何使用Alexandrescu的预期<T>与void函数?

所以我遇到了这个(恕我直言)非常好的想法,使用返回值和异常的复合结构 - Expected<T>.它克服了传统错误处理方法(例外,错误代码)的许多缺点.

安德烈Alexandrescu的的谈话(系统误差在C++处理)它的幻灯片.

异常和错误代码具有基本相同的使用方案,其中函数返回某些内容而不返回内容.Expected<T>另一方面,似乎只针对返回值的函数.

所以,我的问题是:

  • 有没有人Expected<T>在实践中尝试过?
  • 你如何将这个成语应用于什么都不返回的函数(即void函数)?

更新:

我想我应该澄清一下我的问题.在Expected<void>专业化是有道理的,但我更感兴趣的是它如何被使用-在一致的使用成语.实现本身是次要的(并且很容易).

例如,Alexandrescu给出了这个例子(有点编辑):

string s = readline();
auto x = parseInt(s).get(); // throw on error
auto y = parseInt(s); // won’t throw
if (!y.valid()) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

这段代码以一种自然流动的方式"干净".我们需要价值 - 我们得到它.但是,expected<void>有人必须捕获返回的变量并对其执行某些操作(如.throwIfError()或类似的东西),这不是那么优雅.显然,.get()无效是没有道理的.

那么,如果你有另一个函数,比如说toUpper(s),哪个函数就地修改了字符串并没有返回值,你的代码会是什么样子?

c++ error-handling runtime-error c++11

35
推荐指数
3
解决办法
1万
查看次数

标签 统计

c++ ×1

c++11 ×1

error-handling ×1

runtime-error ×1