#include #include #include #include using namespace std; class AbstractVal { public: virtual ~AbstractVal() {} virtual void print() = 0; }; typedef unique_ptr valptr; class IntVal : public AbstractVal { public: IntVal(int x) : x_(x) {} void print() override { cout << x_; } private: int x_; }; class StringVal : public AbstractVal { public: StringVal(string x) : x_(x) {} void print() override { cout << x_; } private: string x_; }; class Seznam { public: void add(valptr p) { pole.push_back(move(p)); } void print() { for (auto&& x : pole) x->print(); } private: vector pole; }; int main() { Seznam s; s.add(make_unique(123)); s.add(make_unique("456")); s.print(); }