Advertisement
Guest User

Untitled

a guest
May 23rd, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.78 KB | None | 0 0
  1. // CC0
  2. #include <memory>
  3. #include <vector>
  4.  
  5. template<class T>
  6. class PtrClass
  7. {
  8. public:
  9.     using Ptr = std::shared_ptr<T>;
  10.     using UPtr = std::unique_ptr<T>;
  11.  
  12.     template <class...Args>
  13.     static Ptr create(Args... args)
  14.     {
  15.         return std::make_shared<_concrete>(std::forward<Args>(args)...);
  16.     }
  17.  
  18.     template <class...Args>
  19.     static UPtr createUnique(Args... args)
  20.     {
  21.         return std::make_unique<_concrete>(std::forward<Args>(args)...);
  22.     }
  23.  
  24. private:
  25.     struct _concrete : public T{};
  26. };
  27.  
  28. class Something : public PtrClass<Something>
  29. {
  30. protected:
  31.     Something();
  32. };
  33.  
  34. void foo()
  35. {
  36.     auto s = Something::create();
  37.     auto us = Something::createUnique();
  38.     // auto s2 = new Something;// error
  39.     // Something s3; // error
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement