gtsam_points
Loading...
Searching...
No Matches
make_shared.hpp
Go to the documentation of this file.
1#ifndef GLK_MAKE_SHARED_HPP
2#define GLK_MAKE_SHARED_HPP
3
4#include <memory>
5#include <type_traits>
6#include <Eigen/Core>
7
8namespace glk {
9
10template <typename...>
11using void_t = void;
12
13template <typename, typename = void_t<>>
14struct needs_aligned_allocator : std::false_type {};
15
16template <typename T>
18
19template <typename T, typename... Args>
20std::enable_if_t<needs_aligned_allocator<T>::value, std::shared_ptr<T>> make_shared(Args&&... args) {
21 return std::allocate_shared<T>(Eigen::aligned_allocator<T>(), std::forward<Args>(args)...);
22}
23
24template <typename T, typename... Args>
25std::enable_if_t<!needs_aligned_allocator<T>::value, std::shared_ptr<T>> make_shared(Args&&... args) {
26 return std::make_shared<T>(std::forward<Args>(args)...);
27}
28
29template <typename T, typename... Args>
30std::unique_ptr<T> make_unique(Args&&... args) {
31 return std::make_unique<T>(std::forward<Args>(args)...);
32}
33
34} // namespace glk
35
36#endif
Definition async_buffer_copy.hpp:6
std::enable_if_t< needs_aligned_allocator< T >::value, std::shared_ptr< T > > make_shared(Args &&... args)
Definition make_shared.hpp:20
std::unique_ptr< T > make_unique(Args &&... args)
Definition make_shared.hpp:30
void void_t
Definition make_shared.hpp:11
Definition make_shared.hpp:14