fork download
  1. #include <iostream>
  2. #include <functional>
  3. #include <memory>
  4.  
  5. // ──────────────────────────────────────────────────────────────────────────────
  6.  
  7. using CallbackType = std::function<void(void*)>;
  8.  
  9. // ──────────────────────────────────────────────────────────────────────────────
  10.  
  11. class Karbofos {
  12.  
  13. // Тут поменял на соотв. типы
  14. std::shared_ptr<CallbackType> Begin = nullptr;
  15. std::shared_ptr<CallbackType> End = nullptr;
  16.  
  17. public:
  18.  
  19. const std::string Name = "Карбофос";
  20.  
  21. // Поменял типы аргументов
  22. void SetCallback(std::shared_ptr<CallbackType> B, std::shared_ptr<CallbackType> E) {
  23. Begin = B;
  24. End = E;
  25. }
  26.  
  27. void Run() {
  28. if (Begin) (*Begin)(this);
  29. std::cout << "- Не отдам, слон - мой!\n";
  30. if (End) (*End)(this);
  31. }
  32. };
  33.  
  34. // ──────────────────────────────────────────────────────────────────────────────
  35.  
  36. void Shef(void* i) {
  37. std::cout << "- Стой, живодер " << ((Karbofos*)(i))->Name << "!\n";
  38. }
  39.  
  40. // ──────────────────────────────────────────────────────────────────────────────
  41.  
  42. void Kollega(void* i) {
  43. std::cout << "- " << ((Karbofos*)(i))->Name << ", ты немец и контрабандист!\n";
  44. }
  45.  
  46. // ──────────────────────────────────────────────────────────────────────────────
  47.  
  48. int main()
  49. {
  50. Karbofos Object;
  51.  
  52. // Заменил здесь
  53. Object.SetCallback(std::shared_ptr<CallbackType>(new CallbackType(Shef)), std::shared_ptr<CallbackType>(new CallbackType(Kollega)));
  54. Object.Run();
  55. return 0;
  56. }
Success #stdin #stdout 0s 4440KB
stdin
Standard input is empty
stdout
- Стой, живодер Карбофос!
- Не отдам, слон - мой!
- Карбофос, ты немец и контрабандист!