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