1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
#pragma once
namespace c10 {
template <typename T>
class OptionalRef {
public:
OptionalRef() : data_(nullptr) {}
OptionalRef(const T* data) : data_(data) {
TORCH_INTERNAL_ASSERT_DEBUG_ONLY(data_);
}
OptionalRef(const T& data) : data_(&data) {}
bool has_value() const {
return data_ != nullptr;
}
const T& get() const {
TORCH_INTERNAL_ASSERT_DEBUG_ONLY(data_);
return *data_;
}
operator bool() const {
return has_value();
}
private:
const T* data_;
};
} // namespace c10
|