Advertisement
Guest User

Untitled

a guest
Jan 4th, 2018
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.23 KB | None | 0 0
  1. #include <iostream>
  2. #include <memory>
  3.  
  4. struct any_acc{
  5.     template<typename T>
  6.     any_acc& operator = (const T& t){
  7.         acc_.reset(new ColoredAccelerate(t));
  8.         return *this;
  9.     }
  10.     int accelerate(){
  11.         return acc_->accelerate();
  12.     }
  13.     struct IAccelerate{
  14.         virtual int accelerate()=0;
  15.     };
  16.     template<typename U>
  17.     struct ColoredAccelerate : public IAccelerate{
  18.         ColoredAccelerate(U val) : val_(val){}
  19.         int accelerate() override{
  20.             return val_.accelerate();
  21.         }
  22.         U val_;
  23.     };
  24.     std::unique_ptr<IAccelerate> acc_;
  25. };
  26.  
  27. struct Bicycle{
  28.   int accelerate(){
  29.       return 5;
  30.   }
  31. };
  32.  
  33. class Rocket{
  34.   public:
  35.   int accelerate(){
  36.       current_speed+=1000;
  37.       return current_speed;
  38.   }
  39.   unsigned int current_speed = 0;
  40.   std::string rocket_name;
  41. };
  42.  
  43. int main()
  44. {
  45.     any_acc acc;
  46.     Rocket rocket1;
  47.     acc = rocket1;
  48.     std::cout << acc.accelerate() << std::endl;
  49.     std::cout << acc.accelerate() << std::endl;
  50.     acc = Bicycle();
  51.     std::cout << acc.accelerate() << std::endl;
  52.     acc = Rocket{};
  53.     std::cout << acc.accelerate() << std::endl;
  54.     acc = rocket1;
  55.     std::cout << acc.accelerate() << std::endl;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement