我正在玩 C++23std::optional
添加,但我不知道如何优雅地访问对象的值,如果optional
它是活动的。
我知道我可以使用if
,但那是C ++20。
我真的很喜欢 C++23 API 的变化,但我不知道如何跳过实现标识的样板。例如:
#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
成员函数。
注意:在我的示例中,我在转换后没有链接其他任何东西,但为了简洁起见,我关心可选不被修改。