#include <stdio.h>
#include <cstdlib>
template <class CLASSNAME>
class a
{
public:
typedef void (CLASSNAME::*myFunction)();
a(CLASSNAME& myObject, myFunction callback) :
m_myObject(myObject)
{
m_myFuntion = callback;
}
void update()
{
(m_myObject.*m_myFuntion)();
}
myFunction m_myFuntion;
CLASSNAME& m_myObject;
};
class dummy
{
public:
dummy()
{
var = 14;
}
void func()
{
printf("func!!");
}
int var;
};
int main()
{
dummy dum;
a<dummy> avar(dum, &dummy::func);
avar.update();
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxjc3RkbGliPgoKdGVtcGxhdGUgPGNsYXNzIENMQVNTTkFNRT4KY2xhc3MgYQp7CnB1YmxpYzoKCXR5cGVkZWYgdm9pZCAoQ0xBU1NOQU1FOjoqbXlGdW5jdGlvbikoKTsKCglhKENMQVNTTkFNRSYgbXlPYmplY3QsIG15RnVuY3Rpb24gY2FsbGJhY2spIDoKCW1fbXlPYmplY3QobXlPYmplY3QpCgl7CgkJbV9teUZ1bnRpb24gPSBjYWxsYmFjazsKCX0KCgl2b2lkIHVwZGF0ZSgpCgl7CgkJKG1fbXlPYmplY3QuKm1fbXlGdW50aW9uKSgpOwoJfQoKCW15RnVuY3Rpb24gbV9teUZ1bnRpb247CglDTEFTU05BTUUmIG1fbXlPYmplY3Q7Cn07CgoKY2xhc3MgZHVtbXkKewpwdWJsaWM6CglkdW1teSgpCgl7CgkJdmFyID0gMTQ7Cgl9CgoKCXZvaWQgZnVuYygpCgl7CgkJcHJpbnRmKCJmdW5jISEiKTsKCX0KCglpbnQgdmFyOwp9OwoKCmludCBtYWluKCkKewoJZHVtbXkgZHVtOwoKCWE8ZHVtbXk+IGF2YXIoZHVtLCAmZHVtbXk6OmZ1bmMpOwoKCWF2YXIudXBkYXRlKCk7Cn0=