#include <utility>
#include <iostream>
#include <functional>
//──────────────────────────────────────────────────────────────────────────────
using CallbackType = std::function<void(void*, int, int)>;
// ──────────────────────────────────────────────────────────────────────────────
class Karbofos {
CallbackType Call;
public:
const std::string Name = "Карбофос";
void SetCallback(CallbackType C) {
Call = std::move(C);
}
void Run() {
if (Call)
Call(this, 1, 20);
std::cout << "- Не продам!\n";
}
};
//──────────────────────────────────────────────────────────────────────────────
class Shef {
public:
void Entreaty(void* c, int a, int b) {
std::cout << "- " << ((Karbofos*)c)->Name
<< ", продай слона за "
<< a << "." << b << "р ?\n";
}
};
//──────────────────────────────────────────────────────────────────────────────
int main() {
Karbofos K;
Shef S;
K.SetCallback(std::bind(
&Shef::Entreaty, &S,
std::placeholders::_1,
std::placeholders::_2,
std::placeholders::_3)
);
K.Run();
return 0;
}
I2luY2x1ZGUgPHV0aWxpdHk+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CgovL+KUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAp1c2luZyBDYWxsYmFja1R5cGUgPSBzdGQ6OmZ1bmN0aW9uPHZvaWQodm9pZCosIGludCwgaW50KT47Ci8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKY2xhc3MgS2FyYm9mb3MgewogICAgQ2FsbGJhY2tUeXBlIENhbGw7CiAgcHVibGljOgogICAgY29uc3Qgc3RkOjpzdHJpbmcgTmFtZSA9ICLQmtCw0YDQsdC+0YTQvtGBIjsKICAgIHZvaWQgU2V0Q2FsbGJhY2soQ2FsbGJhY2tUeXBlIEMpIHsKICAgICAgQ2FsbCA9IHN0ZDo6bW92ZShDKTsKICAgIH0KICAgIHZvaWQgUnVuKCkgewogICAgICBpZiAoQ2FsbCkKICAgICAgICBDYWxsKHRoaXMsIDEsIDIwKTsKICAgICAgc3RkOjpjb3V0IDw8ICItINCd0LUg0L/RgNC+0LTQsNC8IVxuIjsKICAgIH0KfTsKLy/ilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKY2xhc3MgU2hlZiB7CiAgcHVibGljOgogICAgdm9pZCBFbnRyZWF0eSh2b2lkKiBjLCBpbnQgYSwgaW50IGIpIHsKICAgICAgc3RkOjpjb3V0IDw8ICItICIgPDwgKChLYXJib2ZvcyopYyktPk5hbWUKICAgICAgICAgICAgICAgIDw8ICIsINC/0YDQvtC00LDQuSDRgdC70L7QvdCwINC30LAgIgogICAgICAgICAgICAgICAgPDwgYSA8PCAiLiIgPDwgYiA8PCAi0YAgP1xuIjsKICAgIH0KfTsKLy/ilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKaW50IG1haW4oKSB7CiAgS2FyYm9mb3MgSzsKICBTaGVmIFM7CiAgSy5TZXRDYWxsYmFjayhzdGQ6OmJpbmQoCiAgICAgICAgICAgICAgICAgICZTaGVmOjpFbnRyZWF0eSwgJlMsCiAgICAgICAgICAgICAgICAgIHN0ZDo6cGxhY2Vob2xkZXJzOjpfMSwKICAgICAgICAgICAgICAgICAgc3RkOjpwbGFjZWhvbGRlcnM6Ol8yLAogICAgICAgICAgICAgICAgICBzdGQ6OnBsYWNlaG9sZGVyczo6XzMpCiAgICAgICAgICAgICAgICk7CiAgSy5SdW4oKTsKICByZXR1cm4gMDsKfQo=