Сообщения

Сообщения за сентябрь, 2018

Классический полиморфизм и std::variant (C++17).

Интересная статья натолкнула на попытку сравнения производительности кода, использующего старый, основанный на наследовании и виртуальных функциях полиморфизм и новый подход, использующий std::variant, появившийся в стандарте C++17. Итак имеем типы, связанные наследованием от общего предка - абстрактного класса: struct ShapeAbstract {     virtual void Print() = 0;     virtual double Area() = 0;     virtual ~ShapeAbstract() {}; }; struct CircleVirt : ShapeAbstract {     CircleVirt(double val) : radius(val) {}     void Print() override { cout << "CircleVirt. " << "Radius: " << radius << endl; }     double Area() override { return 3.14 * radius * radius; }     double radius; }; struct SquareVirt : ShapeAbstract {     SquareVirt(double val) : side(val) {}     void Print() override { cout << "SquareVirt. Side: " << side << endl; }  ...