#include <iostream>
#include <functional>
typedef unsigned GLuint;
class A {
public:
void Draw(GLuint shader) {
std::cout << "A " << shader << std::endl;
//делаем что-то
}
};
class B {
public:
void Draw(GLuint shader) {
std::cout << "B " << shader << std::endl;
//делаем что-то не тоже что в class A;
}
};
class mainClass {
public:
std::function<void (GLuint)> draw;
};
int main() {
using namespace std::placeholders;
mainClass m;
A a;
B b;
m.draw = std::bind(&A::Draw, a, _1);
m.draw(1);
m.draw = std::bind(&B::Draw, b, _1);
m.draw(2);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCgp0eXBlZGVmIHVuc2lnbmVkIEdMdWludDsKCmNsYXNzIEEgewogICAgCnB1YmxpYzogCiAgIHZvaWQgRHJhdyhHTHVpbnQgc2hhZGVyKSB7CiAgICAgICBzdGQ6OmNvdXQgPDwgIkEgIiA8PCBzaGFkZXIgPDwgc3RkOjplbmRsOwogICAgICAgIC8v0LTQtdC70LDQtdC8INGH0YLQvi3RgtC+CiAgIH0KfTsKIApjbGFzcyBCIHsKcHVibGljOgogCiAgIHZvaWQgRHJhdyhHTHVpbnQgc2hhZGVyKSB7CiAgICAgICBzdGQ6OmNvdXQgPDwgIkIgIiA8PCBzaGFkZXIgPDwgc3RkOjplbmRsOwogICAgICAgIC8v0LTQtdC70LDQtdC8INGH0YLQvi3RgtC+INC90LUg0YLQvtC20LUg0YfRgtC+INCyIGNsYXNzIEE7CiAgIH0KfTsKIApjbGFzcyBtYWluQ2xhc3MgewogICAgCnB1YmxpYzogICAgCiAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoR0x1aW50KT4gZHJhdzsKfTsKCiAKaW50IG1haW4oKSB7CiAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOjpwbGFjZWhvbGRlcnM7CiAgICAKICAgIG1haW5DbGFzcyBtOwogICAgQSBhOwogICAgQiBiOwogICAgCiAgICBtLmRyYXcgPSBzdGQ6OmJpbmQoJkE6OkRyYXcsIGEsIF8xKTsKICAgIG0uZHJhdygxKTsKICAgIAogICAgbS5kcmF3ID0gc3RkOjpiaW5kKCZCOjpEcmF3LCBiLCBfMSk7CiAgICBtLmRyYXcoMik7Cn0=