fork download
  1. #include <iostream>
  2. #include <sstream>
  3. #include <vector>
  4. #include <memory>
  5.  
  6. class Task
  7. {
  8. std::string content;
  9. public:
  10. Task(const std::string& title) : content(title) {}
  11. virtual ~Task() = default;
  12.  
  13. virtual bool check(std::istream& is) const = 0;
  14.  
  15. };
  16.  
  17. class TaskNumber : public Task
  18. {
  19. int value;
  20. public:
  21. TaskNumber(const std::string& title, int value) : Task{title}, value(value) {}
  22.  
  23. bool check(std::istream& is) const override
  24. {
  25. int i;
  26. is >> i;
  27. return i == value;
  28. }
  29.  
  30. };
  31.  
  32. class TaskString : public Task
  33. {
  34. std::string value;
  35. public:
  36. TaskString(const std::string& title, const std::string& s) : Task{title}, value(s) {}
  37.  
  38. bool check(std::istream& is) const override
  39. {
  40. std::string s;
  41. is >> s;
  42. return s == value;
  43. }
  44. };
  45.  
  46. class TaskCollection
  47. {
  48. public:
  49. void addTask(std::unique_ptr<Task> task) { tasks.push_back(std::move(task)); }
  50.  
  51. void run(std::istream& is) {
  52. for (auto& task : tasks) {
  53. std::cout << (task->check(is) ? "Success\n" : "Failed\n");
  54. }
  55. }
  56.  
  57. private:
  58. std::vector<std::unique_ptr<Task>> tasks;
  59. };
  60.  
  61. int main()
  62. {
  63. TaskCollection tasks;
  64.  
  65. tasks.addTask(std::make_unique<TaskString>("t1", "Hello"));
  66. tasks.addTask(std::make_unique<TaskString>("t2", "world"));
  67. tasks.addTask(std::make_unique<TaskNumber>("t3", 42));
  68.  
  69. std::string s{"Hi world 42"};
  70. std::stringstream ss{s};
  71. tasks.run(ss);
  72. }
  73.  
Success #stdin #stdout 0s 16064KB
stdin
Standard input is empty
stdout
Failed
Success
Success