fork download
  1. #include <unordered_map>
  2. #include <memory>
  3. #include <iostream>
  4.  
  5. class Data {
  6. public:
  7. virtual ~Data(){}
  8. virtual int Size() = 0;
  9. };
  10.  
  11. class Struct : public Data {
  12. std::unordered_map<std::string, std::unique_ptr<Data>> m;
  13. public:
  14. Struct & Add(const std::string& name, std::unique_ptr<Data> x) {
  15. m[name] = std::move(x);
  16. return *this;
  17. }
  18. void Print() {
  19. for(const auto& tmp : m )
  20. std::cout << tmp.first << " " << tmp.second->Size() << "\n";
  21. }
  22. int Size() override {
  23. int sum = 0;
  24. for (const auto& tmp : m)
  25. sum += tmp.second->Size();
  26. return sum;
  27. }
  28. };
  29.  
  30. class IntData : public Data {
  31. public:
  32. int Size( ) override { return 4; }
  33. };
  34.  
  35. class DoubleData : public Data {
  36. public:
  37. DoubleData( ) { }
  38. int Size( ) override { return 8; }
  39. };
  40.  
  41. int main() {
  42. Struct a;
  43. a.Add("Integer", std::make_unique<IntData>() );
  44. a.Print();
  45. }
  46.  
Success #stdin #stdout 0s 3460KB
stdin
Standard input is empty
stdout
Integer    4