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 | |