Advertisement
Rapptz

make_unique.h

Apr 5th, 2013
355
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.39 KB | None | 0 0
  1. #pragma once
  2. #ifndef MAKE_UNIQUE_H_INCLUDED
  3. #define MAKE_UNIQUE_H_INCLUDED
  4.  
  5. #include <memory>
  6. #include <utility>
  7.  
  8. namespace util{
  9.  
  10. // emulate variadics for 5 args
  11. template<class T>
  12. std::unique_ptr<T> make_unique(){
  13.   return std::unique_ptr<T>(new T());
  14. }
  15.  
  16. template<class T, class A0>
  17. std::unique_ptr<T> make_unique(A0&& a0){
  18.   return std::unique_ptr<T>(new T(std::forward<A0>(a0)));
  19. }
  20.  
  21. template<class T, class A0, class A1>
  22. std::unique_ptr<T> make_unique(A0&& a0, A1&& a1){
  23.   return std::unique_ptr<T>(new T(std::forward<A0>(a0),
  24.       std::forward<A1>(a1)));
  25. }
  26.  
  27. template<class T, class A0, class A1, class A2>
  28. std::unique_ptr<T> make_unique(A0&& a0, A1&& a1, A2&& a2){
  29.   return std::unique_ptr<T>(new T(std::forward<A0>(a0),
  30.       std::forward<A1>(a1), std::forward<A2>(a2)));
  31. }
  32.  
  33. template<class T, class A0, class A1, class A2, class A3>
  34. std::unique_ptr<T> make_unique(A0&& a0, A1&& a1, A2&& a2, A3&& a3){
  35.   return std::unique_ptr<T>(new T(std::forward<A0>(a0),
  36.       std::forward<A1>(a1), std::forward<A2>(a2),
  37.       std::forward<A3>(a3)));
  38. }
  39.  
  40. template<class T, class A0, class A1, class A2, class A3, class A4>
  41. std::unique_ptr<T> make_unique(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4){
  42.   return std::unique_ptr<T>(new T(std::forward<A0>(a0),
  43.       std::forward<A1>(a1), std::forward<A2>(a2),
  44.       std::forward<A3>(a3), std::forward<A4>(a4)));
  45. }
  46.  
  47. } // util::
  48.  
  49. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement