溫馨提示×

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

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

在 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 而不是自己實現一個類似的類。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女