Advertisement
Guest User

Untitled

a guest
Aug 17th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.14 KB | None | 0 0
  1. class Handle : public IHandle_<Handle>{
  2. public:
  3. Handle(std::unique_ptr<Derived> aDerived)
  4. : derived(std::move(aDerived)),
  5. base(*aDerived) {};
  6.  
  7. std::unique_ptr<Derived> derived;
  8. Base& base;
  9. };
  10.  
  11. class Handle : public IHandle_<Handle>{
  12. private:
  13. std::unique_ptr<Derived1> myD1;
  14. std::unique_ptr<Derived2> myD2;
  15.  
  16. public:
  17. Handle(std::unique_ptr<Derived1> aD1)
  18. : myD1(std::move(aD1)),
  19. base1(*aD1),
  20. base2(*aD1){};
  21. Handle(std::unique_ptr<Derived2> aD2)
  22. : myD2(std::move(aD2)),
  23. base1(*aD2),
  24. base2(*aD2){};
  25.  
  26. Base1& base1;
  27. Base2& base2;
  28.  
  29. };
  30.  
  31. #include <memory>
  32. #include <iostream>
  33.  
  34. class Base{
  35. public:
  36. Base(int ax) : x(ax){};
  37. virtual ~Base() = 0;
  38. virtual void setVal(float a) = 0;
  39. virtual float getVal() = 0 ;
  40.  
  41. int x;
  42. };
  43.  
  44. Base::~Base(){}
  45.  
  46. class Derived : public Base{
  47. public:
  48. Derived(int ax, int az)
  49. : Base(ax), z(az){};
  50.  
  51. int z;
  52. };
  53.  
  54. class Concrete : public Derived{
  55. public:
  56. Concrete(int ax, int aw, int av)
  57. : Derived(ax, aw),
  58. v(av){};
  59. void setVal(float a) override{
  60. myVal = a;
  61. }
  62. float getVal() override{
  63. return myVal;
  64. }
  65. float myVal;
  66. int v;
  67. };
  68.  
  69. class IHandle{
  70. public:
  71. virtual ~IHandle() = 0;
  72. };
  73.  
  74. IHandle::~IHandle(){}
  75.  
  76. template <class T>
  77. class IHandle_ : public IHandle{
  78. public:
  79. virtual ~IHandle_() = 0;
  80. };
  81.  
  82. template <class T>
  83. IHandle_<T>::~IHandle_(){};
  84.  
  85. class Handle : public IHandle_<Handle>{
  86. public:
  87. Handle(std::unique_ptr<Derived> aDerived)
  88. : derived(std::move(aDerived)),
  89. base(*aDerived) {};
  90.  
  91. std::unique_ptr<Derived> derived;
  92. Base& base;
  93. };
  94.  
  95.  
  96. int main(){
  97. std::unique_ptr<Derived> ptr(new Concrete(1, 2, 3));
  98. std::unique_ptr<IHandle> aHandle(new Handle(std::move(ptr)));
  99. Handle& handle = static_cast<Handle&>(*aHandle);
  100. handle.base.setVal(10.0);
  101. std::cout << "a = " << handle.base.getVal() << std::endl;
  102. return 0;
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement