#include <iostream>
typedef int (*FuncPtr_t)(void*, int);
static int simpleFunction(FuncPtr_t pfunc, void *context, int nos)
{
pfunc(context, nos);
}
struct A {
int i;
int pf(int nos) { std::cout << i << " nos = " << nos << "\n"; return i; }
};
int main() {
A a { 1234 };
// could combine the next two lines into one, I didn't.
auto trampoline = [](void *inst, int nos) { return ((A*)inst)->pf(nos); };
simpleFunction(trampoline, &a, 42);
}
ICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KCiAgICB0eXBlZGVmIGludCAoKkZ1bmNQdHJfdCkodm9pZCosIGludCk7CiAgICBzdGF0aWMgaW50IHNpbXBsZUZ1bmN0aW9uKEZ1bmNQdHJfdCBwZnVuYywgdm9pZCAqY29udGV4dCwgaW50IG5vcykKICAgIHsKICAgICAgICBwZnVuYyhjb250ZXh0LCBub3MpOwogICAgfQoKICAgIHN0cnVjdCBBIHsKICAgICAgICBpbnQgaTsKICAgICAgICBpbnQgcGYoaW50IG5vcykgeyBzdGQ6OmNvdXQgPDwgaSA8PCAiIG5vcyA9ICIgPDwgbm9zIDw8ICJcbiI7IHJldHVybiBpOyB9CiAgICB9OwoKICAgIGludCBtYWluKCkgewogICAgICAgIEEgYSB7IDEyMzQgfTsKICAgICAgICAvLyBjb3VsZCBjb21iaW5lIHRoZSBuZXh0IHR3byBsaW5lcyBpbnRvIG9uZSwgSSBkaWRuJ3QuCiAgICAgICAgYXV0byB0cmFtcG9saW5lID0gW10odm9pZCAqaW5zdCwgaW50IG5vcykgeyByZXR1cm4gKChBKilpbnN0KS0+cGYobm9zKTsgfTsKICAgICAgICBzaW1wbGVGdW5jdGlvbih0cmFtcG9saW5lLCAmYSwgNDIpOwogICAgfQo=