溫馨提示×

如何在C++中使用option類型

c++
小樊
85
2024-09-07 05:09:37
欄目: 編程語言

在 C++ 中,沒有內(nèi)置的 “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

請注意,這是一個簡化的實現(xiàn),并且不包括許多其他語言中的 Option 類型所提供的功能。例如,這里沒有實現(xiàn) mapandThen 等方法。你可以根據(jù)需要添加這些功能。

另外,C++17 引入了一個新特性 std::optional,它提供了一種更標(biāo)準(zhǔn)和更完整的方式來處理可能存在或不存在的值。如果你的編譯器支持 C++17,建議使用 std::optional 而不是自己實現(xiàn)一個類似的類。

0