- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否有 std::optional
的替代方案,我不必将 result
作为参数传递给函数。我希望函数不修改其参数(更纯粹/不可变)。
长话短说
std::optional
的问题似乎是我们丢失了有关错误的信息。该函数返回一个值或空值,因此您无法判断哪里出了问题。
使用 std::optional
std::optional<std::string> doSomething() {
std::string value;
int rc = callApi(value);
if (rc == 0) {
//do some processing on value
return value;
}
return std::nullopt;
}
//calling the function seems much more pure/cleaner than when passing a result parameter.
没有 std::optional
int doSomething(std::string& result) {
std::string value;
int rc = callApi(value);
if (rc == 0) { //if no error
//do some processing on value and set result = value
result = value;
}
return rc;
}
最佳答案
您要找的似乎是std::expected
.
...它实际上并不在标准中,但是:
但是 - 它是什么?
好吧...简而言之:当您想要返回某个值或某种故障/错误描述符时,您只需将它们模板化,比如转换为 T、E,这些就是模板参数:std::expected<T, E>
.由于 T 和 E 是不相交的类型,您知道从函数返回的是哪一个。
这是您的函数,适用于您的 API 似乎具有的错误类型:
namespace my_api {
using error_t = int;
enum : error_t { success = 0, invalid_input = 1, /* etc. */ };
} // namespace my_api
std::expected<std::string, my_api::error_t> doSomething() {
std::string value;
my_api::error_t rc = callApi(value);
if (rc != success) { return rc; }
//do some processing on value
return value;
}
当然是 my_api
namespace 不是我建议的一部分,它只是一个例子,因为你没有说明你想如何传达错误。实际上,您甚至可以添加:
namespace my_api {
template <typename T>
using expected = std::expected<T, error_t>;
} // namespace my_api
然后你的函数签名变成:
my_api::expected<std::string> doSomething();
关于c++ - 可以报告失败原因的 std::optional 的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70570700/
我是 Java 新手,我遇到了这个我无法解决的问题。我继承了这个项目,并且我的 scriptlet 之一中有以下代码: DefaultLogger.logMessage("DEBUG path: "+
在做web应用的自动化测试时,定位元素是必不可少的,这个过程经常会碰到定位不到元素的情况(报selenium.common.exceptions.NoSuchElementException),一般
我之前已经这样做过,但令我惊讶的是 CListCtrl 不会以颜色显示文本。我在对话框上有 ListView 控件。我正在使用 VS2010,是否还缺少其他东西? void CGameView::On
我正在尝试计算 4 个表中每个学生的 GPA: Student(STUDENT_ID, STUDENT_LNAME, STUDENT_FNAME, MAJOR) Course(COURSE_NO, C
当我在 windows 和 mac 上使用 jasper 报告时它工作正常,当我将我的应用程序部署到 linux 机器 并尝试生成它抛出的报告时 net.sf.jasperreports.engine
我正在构建 iOS 应用并尝试实现应用内购买(非消费品)。 所有 bundle ID 等都已设置并正常工作,当我获取 Apple Store 服务器时,我可以看到我的产品有效。但是,在测试时,我在 p
我正在尝试使用非固定字符数组读取用户输入,但当我在键盘上输入内容时它只是软崩溃(没有崩溃窗口)。当我在在线 C 编译器上运行它时,它说 Segmentation fault (core dumped)
事实: 无根 podman 非常适合 uid 1480 无根 podman 为 uid 2088 失败 中央操作系统 7 内核 3.10.0-1062.1.2.el7.x86_64 podman 版本
根据 homebrew-brew 官方的解释得知,MongoDB 不再是开源的了,并且已经从 Homebrew中移除 #43770 正是由于 MongoDB 的商业化不太理想,所以它选择了闭源。所
我用命令禁用collectstatic heroku config:set DISABLE_COLLECTSTATIC=1 成功将我的项目推送到 Heroku 后,手动 collectstatic 如
代码如下: public class TryStuffOutHere { public static void main(String[] args) {
我已经设置了我的 redis 服务器,以便 CONFIG GET dir --> "/var/lib/redis" 和 CONFIG GET dbfilename --> "redis.rdb". 但
我是一名优秀的程序员,十分优秀!