c++ - std::optional 的详细程度
问题描述
这是我的代码中的一个示例,使用std::optional
:
Max = index(summary_max.value(), clusters[summary_max.value()]->Maximum().value());
在这里,summary_max
并且Maximum()
是std::optional
。这太冗长了。我只想输入index(summary_max, clusters[summary_max]->Maximum());
为什么不std::optional<T>
支持隐式转换为T
?有任何有效的、不可避免的理由吗?
解决方案
如果您确定您的可选对象确实具有值,则可以使用operator*
运算符函数而不是value()
成员函数:
Max = index(*summary_max,
*(clusters[*summary_max]->Maximum()));
// rant: looks more like C than C++ to me.
但是由于您使用了summary_max
两次存储的值,您可能只是想在index(...)
调用中使用它之前提取 (copy/const ref)。
const auto& max_index = summary_max.value();
Max = index(max_index, *(clusters[max_index]->Maximum()));
推荐阅读
- javascript - 如何在discord js中为每个服务器存储不同的数组?
- javascript - React SetState is ignored
- r - R:当变量对始终包含 NA 时,如何执行多个 t.Tests?
- vue.js - Vue WSL Ubuntu - 在新应用程序中删除 HelloWorld.vue 组件时找不到“HelloWorld.vue”依赖项
- r - 使用 if/else 语句将虚拟变量分配给时间序列?
- c++ - 是否可以在派生类的联合中使用基类成员?
- javascript - 使用 Puppeteer 单击选择器
- python - 更新导入的对象
- mongodb - 使用 express-rate-limit 存储 cookie 信息
- scala - 将 Future[A] 转换为 Future[Try[A]] 或 EitherT[Future, Throwable, A]