Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // CC0
- #include <memory>
- #include <vector>
- template<class T>
- class PtrClass
- {
- public:
- using Ptr = std::shared_ptr<T>;
- using UPtr = std::unique_ptr<T>;
- template <class...Args>
- static Ptr create(Args... args)
- {
- return std::make_shared<_concrete>(std::forward<Args>(args)...);
- }
- template <class...Args>
- static UPtr createUnique(Args... args)
- {
- return std::make_unique<_concrete>(std::forward<Args>(args)...);
- }
- private:
- struct _concrete : public T{};
- };
- class Something : public PtrClass<Something>
- {
- protected:
- Something();
- };
- void foo()
- {
- auto s = Something::create();
- auto us = Something::createUnique();
- // auto s2 = new Something;// error
- // Something s3; // error
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement