std::optionals 上的数学?
Math on std::optionals?
当我尝试这个时:
#include <optional> using namespace std;
int main() {
return make_optional(2) + make_optional(3);
}
我明白了:
error: no match for ‘operator+’ (operand types are ‘std::optional<int>’ and
‘std::optional<int>’)
5 | return make_optional(2) + make_optional(3);
| ~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~
| | |
| optional<[...]> optional<[...]>
添加与 size_t
类型相同的 optional
类型似乎很自然。 ~~我知道 Haskell 本身就支持这个~~(编辑:这个假设并不完全正确)。
当然我可以写一个辅助函数。我问的目的是确保没有更简单的方法来做到这一点。
在你提出建议之前,是的,我已经用谷歌搜索、RTFM 搜索等
如您所见,here std::optional
根本不提供 operator+
会员。毕竟,std::optional
能够包含任何内容,包括 operator+
没有意义的类型。 optional<that_type>::operator+
会为这些类型做什么?
显然,您可以编写自己的自由函数(取模 const
/&
/两者或您认为适合 parameters/return 类型的任何函数):
std::optional<int> operator+(std::optional<int> o1, std::optional<int> o2) {
if (o1) {
if (o2) {
return std::make_optional(o1.value() + o2.value());
}
}
return std::nullopt;
}
当我尝试这个时:
#include <optional> using namespace std;
int main() {
return make_optional(2) + make_optional(3);
}
我明白了:
error: no match for ‘operator+’ (operand types are ‘std::optional<int>’ and
‘std::optional<int>’)
5 | return make_optional(2) + make_optional(3);
| ~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~
| | |
| optional<[...]> optional<[...]>
添加与 size_t
类型相同的 optional
类型似乎很自然。 ~~我知道 Haskell 本身就支持这个~~(编辑:这个假设并不完全正确)。
当然我可以写一个辅助函数。我问的目的是确保没有更简单的方法来做到这一点。
在你提出建议之前,是的,我已经用谷歌搜索、RTFM 搜索等
如您所见,here std::optional
根本不提供 operator+
会员。毕竟,std::optional
能够包含任何内容,包括 operator+
没有意义的类型。 optional<that_type>::operator+
会为这些类型做什么?
显然,您可以编写自己的自由函数(取模 const
/&
/两者或您认为适合 parameters/return 类型的任何函数):
std::optional<int> operator+(std::optional<int> o1, std::optional<int> o2) {
if (o1) {
if (o2) {
return std::make_optional(o1.value() + o2.value());
}
}
return std::nullopt;
}