首页 > 解决方案 > 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?有任何有效的、不可避免的理由吗?

标签: c++c++17

解决方案


如果您确定您的可选对象确实具有值,则可以使用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()));

推荐阅读