    #include <iostream>
    #include <functional>
     
    // ──────────────────────────────────────────────────────────────────────────────
     
    using CallbackType = std::function<void(void*)>;
     
    // ──────────────────────────────────────────────────────────────────────────────
     
    class Karbofos {
     
        CallbackType Begin = nullptr;
        CallbackType End = nullptr;
     
      public:
     
        const std::string Name = "Карбофос";
     
        void SetCallback(CallbackType B, CallbackType E) {
          Begin = B;
          End = E;
        }
     
        void Run() {
          if (Begin) (Begin)(this);
          std::cout << "- Не отдам, слон - мой!\n";
          if (End) (End)(this);
        }
     
    };
     
    // ──────────────────────────────────────────────────────────────────────────────
     
    void Shef(void* i) {
      std::cout << "- Стой, живодер " << ((Karbofos*)(i))->Name << "!\n";	
    }
     
    // ──────────────────────────────────────────────────────────────────────────────
     
    void Kollega(void* i) {
      std::cout << "- " << ((Karbofos*)(i))->Name << ", ты немец и контрабандист!\n";	
    }
     
    // ──────────────────────────────────────────────────────────────────────────────
     
    int main() {
      Karbofos Object;	
      //CallbackType S = Shef;
      //CallbackType K = Kollega;
      Object.SetCallback(Shef,Kollega);
      Object.Run();
      return 0;
    }