gpt4 book ai didi

c++ - 与返回类型无关的 value_or 的替代方法

转载 作者:太空狗 更新时间:2023-10-29 23:35:01 25 4
gpt4 key购买 nike

我建了一个小类(class) Card重载 <<运算符(operator),基本上打印出卡的花色和值(value)。

实现细节与我想在这里问的问题无关,只是假设显而易见。对于 Card我建立了一个类CardDeck .当然是CardDeck可以用完卡片。这促使我进行了这次尝试:

std::optional<Card> CardDeck::drawCard() {
if (this->Cards.empty()) {
return std::nullopt;
}
else {
Card card = this->Cards.front();
this->Cards.pop_front();
return std::optional<Card>{card};
}
}

现在可以抽一张牌了,处理空牌的可能性是客户端代码使用CardDeck的责任。 , 但该方法并不总是返回一个值,这很冗长。我喜欢这个解决方案。

无论如何,作为 C++ 的新手,我做出了天真的答案:

std::cout<< cardDeck.drawCard().value_or("Out of cards!");

这失败了,因为 "Out of cards!" 的类型是char*但不是 Card .

我的问题:有没有办法在不检查和访问 vaule/在两个不同的地方使用替代品的情况下保护优雅的 oneliner?

最佳答案

在我看来,处理这个问题的最简单方法是为 operator << 添加重载。对于 std::optional<Card> .在那里你可以处理打印内容的逻辑

std::ostream& operator <<(std::ostream& os, const std::optional<Card>& card)
{
if (card == std::nullopt)
return os << "Out of cards!";
else
return os << *card;
}

然后你就可以拥有

std::cout << cardDeck.drawCard();

关于c++ - 与返回类型无关的 value_or 的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50723966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com