阅读量:0
在 C++ 中,没有内置的 “option” 类型(与 Rust 或其他语言中的 Option
类型相反)
首先,定义一个模板类 Optional
:
#include<iostream> #include <utility> template<typename T> class Optional { public: Optional() : hasValue_(false) {} Optional(const T& value) : hasValue_(true), value_(value) {} Optional(T&& value) : hasValue_(true), value_(std::move(value)) {} bool hasValue() const { return hasValue_; } const T& getValue() const { if (!hasValue_) { throw std::runtime_error("No value present"); } return value_; } private: bool hasValue_; T value_; };
然后,你可以像下面这样使用它:
int main() { Optional<int> a; Optional<int> b(42); if (a.hasValue()) { std::cout << "a has value: " << a.getValue()<< std::endl; } else { std::cout << "a has no value"<< std::endl; } if (b.hasValue()) { std::cout << "b has value: " << b.getValue()<< std::endl; } else { std::cout << "b has no value"<< std::endl; } return 0; }
这将输出:
a has no value b has value: 42
请注意,这是一个简化的实现,并且不包括许多其他语言中的 Option
类型所提供的功能。例如,这里没有实现 map
、andThen
等方法。你可以根据需要添加这些功能。
另外,C++17 引入了一个新特性 std::optional
,它提供了一种更标准和更完整的方式来处理可能存在或不存在的值。如果你的编译器支持 C++17,建议使用 std::optional
而不是自己实现一个类似的类。