Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <memory>
- struct any_acc{
- template<typename T>
- any_acc& operator = (const T& t){
- acc_.reset(new ColoredAccelerate(t));
- return *this;
- }
- int accelerate(){
- return acc_->accelerate();
- }
- struct IAccelerate{
- virtual int accelerate()=0;
- };
- template<typename U>
- struct ColoredAccelerate : public IAccelerate{
- ColoredAccelerate(U val) : val_(val){}
- int accelerate() override{
- return val_.accelerate();
- }
- U val_;
- };
- std::unique_ptr<IAccelerate> acc_;
- };
- struct Bicycle{
- int accelerate(){
- return 5;
- }
- };
- class Rocket{
- public:
- int accelerate(){
- current_speed+=1000;
- return current_speed;
- }
- unsigned int current_speed = 0;
- std::string rocket_name;
- };
- int main()
- {
- any_acc acc;
- Rocket rocket1;
- acc = rocket1;
- std::cout << acc.accelerate() << std::endl;
- std::cout << acc.accelerate() << std::endl;
- acc = Bicycle();
- std::cout << acc.accelerate() << std::endl;
- acc = Rocket{};
- std::cout << acc.accelerate() << std::endl;
- acc = rocket1;
- std::cout << acc.accelerate() << std::endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement