typedef void ( * FuncPtr) ( void * ) ;
class MyClass
{
public :
void Method ( ) ;
//
// More callback thunks and methods...
//
MyClass ( )
{
// RegisterCallbacks(s_callbackTable, this);
}
private :
static void Thunk ( void * context)
{
reinterpret_cast < MyClass* > ( context) - > Method( ) ;
}
static const FuncPtr s_callbackTable[ ] ;
} ;
//
// In the .cpp file:
//
const FuncPtr MyClass:: s_callbackTable [ ] =
{
& MyClass:: Thunk
} ;
dHlwZWRlZiB2b2lkICgqRnVuY1B0cikodm9pZCopOwoKICAgIGNsYXNzIE15Q2xhc3MKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgICAgdm9pZCBNZXRob2QgKCk7CgogICAgICAgIC8vCiAgICAgICAgLy8gTW9yZSBjYWxsYmFjayB0aHVua3MgYW5kIG1ldGhvZHMuLi4KICAgICAgICAvLwoKICAgICAgICBNeUNsYXNzICgpCiAgICAgICAgewogICAgICAgICAgICAvLyBSZWdpc3RlckNhbGxiYWNrcyhzX2NhbGxiYWNrVGFibGUsIHRoaXMpOwogICAgICAgIH0KCiAgICBwcml2YXRlOgoKICAgICAgICBzdGF0aWMgdm9pZCBUaHVuayAodm9pZCogY29udGV4dCkKICAgICAgICB7CiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8TXlDbGFzcyo+KGNvbnRleHQpLT5NZXRob2QoKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBjb25zdCBGdW5jUHRyIHNfY2FsbGJhY2tUYWJsZVtdOwogICAgfTsKCiAgICAvLwogICAgLy8gSW4gdGhlIC5jcHAgZmlsZToKICAgIC8vCiAgICBjb25zdCBGdW5jUHRyIE15Q2xhc3M6OnNfY2FsbGJhY2tUYWJsZVtdID0KICAgIHsKICAgICAgICAmTXlDbGFzczo6VGh1bmsKICAgIH07
compilation info
/usr/lib/gcc/i586-linux-gnu/5/../../../i386-linux-gnu/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
/home/1SclTh/ccCasXY0.o: In function `MyClass::Thunk(void*)':
prog.cpp:(.text._ZN7MyClass5ThunkEPv[_ZN7MyClass5ThunkEPv]+0x1): undefined reference to `MyClass::Method()'
collect2: error: ld returned 1 exit status
stdout