LeviLamina
Loading...
Searching...
No Matches
WeakRef.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4#include "mc/deps/game_refs/GameRefs.h"
5#include "mc/deps/game_refs/StackRefResult.h"
6
7template <class T>
8class WeakRef : public GameRefs<T>::WeakStorage {
9public:
10 using Base = GameRefs<T>::WeakStorage;
11 using Base::Base;
12
13 constexpr WeakRef(GameRefs<T>::StackResultStorage const& ptr) : Base(ptr) {}
14 constexpr WeakRef(Base const& ptr) : Base(ptr) {}
15 constexpr WeakRef(Base&& ptr) : Base(std::move(ptr)) {}
16
17 constexpr StackRefResult<T> lock() const {
18 if constexpr (requires(Base t) { t.lock(); }) {
19 return StackRefResult<T>{this->Base::lock()};
20 } else {
21 return StackRefResult<T>{*this};
22 }
23 }
24};
Definition StackRefResult.h:7
Definition WeakRef.h:8
Definition GameRefs.h:6