SPARK  0.1.0
A general purpose game engine written in C++.
Loading...
Searching...
No Matches
Pointers.h
1#pragma once
2
3#include <memory>
4
5namespace spark::lib
6{
13 template <typename T>
14 constexpr std::shared_ptr<T> as_shared(std::unique_ptr<T>&& ptr)
15 {
16 return std::shared_ptr<T>(std::move(ptr));
17 }
18
26 template <typename To, typename From>
27 constexpr std::unique_ptr<To> static_unique_pointer_cast(std::unique_ptr<From>&& old)
28 {
29 return std::unique_ptr<To>(static_cast<To*>(old.release()));
30 }
31
39 template <typename To, typename From>
40 constexpr std::unique_ptr<To> reinterpret_unique_pointer_cast(std::unique_ptr<From>&& old)
41 {
42 return std::unique_ptr<To>(reinterpret_cast<To*>(old.release()));
43 }
44
52 template <typename To, typename From>
53 constexpr std::unique_ptr<To> dynamic_unique_pointer_cast(std::unique_ptr<From>&& old)
54 {
55 return std::unique_ptr<To>(dynamic_cast<To*>(old.release()));
56 }
57}