【发布时间】:2021-02-06 12:49:40
【问题描述】:
我有一个返回可选结构的方法,如下所示:
auto getBook(const std::string &title) const -> std::optional<Book>;
我想在另一个返回可选作者的方法中调用此方法。 问题是在调用方法之前,实现应该总是检查 getBook 返回的可选项是否被填写,像这样:
auto getAuthor(const std::string &title) const -> std::optional<Author>
{
const auto optBook = getBook(title);
if (optBook.has_value)
return optBook->getAuthor();
else
return std::nullopt;
}
有没有办法用更短的方式来写这个,这样如果可选项被填充,则调用方法,但如果可选项为空,则返回std::nullopt。像这样的东西(我知道这目前不起作用,但你明白我的意思):
auto getAuthor(const std::string &title) const -> std::optional<Author>
{
return getBook(title).getAuthor();
}
【问题讨论】:
-
C++ 中没有任何东西可以做到这一点。它不起作用的原因是由于 C++ 工作的核心、基本方式。如果你发现你必须经常做这种事情,你将不得不实现自己的脚手架来实现它,可能使用某种模板函数。
-
此类用例的语法糖已在 Swift 和 Rust 等语言中引入,但尚未在 C++ 中引入(我相信我们不会很快看到这样的东西)
标签: c++ stdoptional