首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问C++23 std::可选而不写入标识样板中包含的值?

如何访问C++23 std::可选而不写入标识样板中包含的值?
EN

Stack Overflow用户
提问于 2022-02-07 21:58:34
回答 1查看 558关注 0票数 7

我正在处理C++23 std::optional的添加,但是如果optional是活动的,我就不知道如何优雅地访问对象的值。

我知道我可以使用if,但这就是C++20。

我非常喜欢C++23 API的更改,但是我想不出如何跳过实现标识的样板。例如:

代码语言:javascript
复制
#include <functional>
#include <iostream>
#include <optional>

void print(std::optional<std::string>& name) {
    name.transform([](std::string& x) {
        std::cout << x << std::endl;
        // I just want to print, without modifying optional, but next line is required
        return x;
    });
}

int main() {
    std::optional<std::string> name{{"Bjarne"}};
    print(name);
}

几乎感觉到std::optional缺少了invoke成员函数。

注意:在我的示例中,在转换后我不链接任何其他内容,但为了简洁起见,我关心的是可选的不被修改。

EN

回答 1

Stack Overflow用户

发布于 2022-02-08 03:25:18

optional中添加到C++23中的操作是一元性。这就是他们的设计。它们实现了某些常见的使用模式,否则使用起来会很繁琐。transform用于条件转换。and_then用于从现有的可选对象中有条件地处理一个全新的可选选项。or_else用于处理缺少值非常简单的情况。所有的人一起工作允许链子。

但是“如果可选项有价值的话做一些事情”这一基本行为并不符合这一范式。这可不是链子。这不是一元论的价值操纵。这只是正常使用一个可选的。

使用if不仅可以更清楚地了解所发生的事情,而且会减少噪音(例如,没有lamdba和参数)。当通常的机制很好的时候,就没有理由这么做了。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71025948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档