#include <iostream>
#include <functional>
#include <memory>
// ──────────────────────────────────────────────────────────────────────────────
using CallbackType = std::function<void(void*)>;
// ──────────────────────────────────────────────────────────────────────────────
class Karbofos {
// Тут поменял на соотв. типы
std::shared_ptr<CallbackType> Begin = nullptr;
std::shared_ptr<CallbackType> End = nullptr;
public:
const std::string Name = "Карбофос";
// Поменял типы аргументов
void SetCallback(std::shared_ptr<CallbackType> B, std::shared_ptr<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;
// Заменил здесь
Object.SetCallback(std::shared_ptr<CallbackType>(new CallbackType(Shef)), std::shared_ptr<CallbackType>(new CallbackType(Kollega)));
Object.Run();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KI2luY2x1ZGUgPG1lbW9yeT4KCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKdXNpbmcgQ2FsbGJhY2tUeXBlID0gc3RkOjpmdW5jdGlvbjx2b2lkKHZvaWQqKT47CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCmNsYXNzIEthcmJvZm9zIHsKCiAgICAvLyDQotGD0YIg0L/QvtC80LXQvdGP0Lsg0L3QsCDRgdC+0L7RgtCyLiDRgtC40L/RiwogICAgc3RkOjpzaGFyZWRfcHRyPENhbGxiYWNrVHlwZT4gQmVnaW4gPSBudWxscHRyOwogICAgc3RkOjpzaGFyZWRfcHRyPENhbGxiYWNrVHlwZT4gRW5kID0gbnVsbHB0cjsKCnB1YmxpYzoKCiAgICBjb25zdCBzdGQ6OnN0cmluZyBOYW1lID0gItCa0LDRgNCx0L7RhNC+0YEiOwoKICAgIC8vINCf0L7QvNC10L3Rj9C7INGC0LjQv9GLINCw0YDQs9GD0LzQtdC90YLQvtCyCiAgICB2b2lkIFNldENhbGxiYWNrKHN0ZDo6c2hhcmVkX3B0cjxDYWxsYmFja1R5cGU+IEIsIHN0ZDo6c2hhcmVkX3B0cjxDYWxsYmFja1R5cGU+IEUpIHsKICAgICAgICBCZWdpbiA9IEI7CiAgICAgICAgRW5kID0gRTsKICAgIH0KCiAgICB2b2lkIFJ1bigpIHsKICAgICAgICBpZiAoQmVnaW4pICgqQmVnaW4pKHRoaXMpOwogICAgICAgIHN0ZDo6Y291dCA8PCAiLSDQndC1INC+0YLQtNCw0LwsINGB0LvQvtC9IC0g0LzQvtC5IVxuIjsKICAgICAgICBpZiAoRW5kKSAoKkVuZCkodGhpcyk7CiAgICB9Cn07CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCnZvaWQgU2hlZih2b2lkKiBpKSB7CiAgICBzdGQ6OmNvdXQgPDwgIi0g0KHRgtC+0LksINC20LjQstC+0LTQtdGAICIgPDwgKChLYXJib2ZvcyopKGkpKS0+TmFtZSA8PCAiIVxuIjsKfQoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgp2b2lkIEtvbGxlZ2Eodm9pZCogaSkgewogICAgc3RkOjpjb3V0IDw8ICItICIgPDwgKChLYXJib2ZvcyopKGkpKS0+TmFtZSA8PCAiLCDRgtGLINC90LXQvNC10YYg0Lgg0LrQvtC90YLRgNCw0LHQsNC90LTQuNGB0YIhXG4iOwp9CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCmludCBtYWluKCkgCnsKICAgIEthcmJvZm9zIE9iamVjdDsKCiAgICAvLyDQl9Cw0LzQtdC90LjQuyDQt9C00LXRgdGMCiAgICBPYmplY3QuU2V0Q2FsbGJhY2soc3RkOjpzaGFyZWRfcHRyPENhbGxiYWNrVHlwZT4obmV3IENhbGxiYWNrVHlwZShTaGVmKSksIHN0ZDo6c2hhcmVkX3B0cjxDYWxsYmFja1R5cGU+KG5ldyBDYWxsYmFja1R5cGUoS29sbGVnYSkpKTsKICAgIE9iamVjdC5SdW4oKTsKICAgIHJldHVybiAwOwp9