#include <stdio.h>
struct Library {
template <class Object,class Function>
void SetCallback(Object &obj, Function f);
};
struct Object {
void Method( void );
};
typedef void (Object::*Function)(void);
struct T_CUSTOMER {
Object o;
Function f;
};
T_CUSTOMER customer;
template <class Object,class Function>
void Library::SetCallback( Object &obj, Function f ) {
customer.o = obj;
customer.f = f;
}
void someFunction(void) {
(customer.o.*customer.f)();
}
struct AnyCustomerClass : Object {
Library lib;
AnyCustomerClass() {
lib.SetCallback( *this, (Function)&AnyCustomerClass::callback );
}
void callback(void) {
printf( "callback!\n" );
}
};
int main( void ) {
AnyCustomerClass a;
someFunction();
}