我建立了一个Card
重载<<
运算符的小类,基本上打印出卡片的花色和价值。
实现细节与我想在这里提出的问题无关,只是假设显而易见。因为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++ 的新手,我做了一个天真的 ansatz:
std::cout<< cardDeck.drawCard().value_or("Out of cards!");
这会失败,因为"Out of cards!"
ischar*
但 not的类型Card
。
我的问题:有没有办法在不检查和访问 vaule/在两个单独的地方使用替换的情况下保护优雅的 oneliner?