#include <iostream>
using namespace std;
class MyClass {
public :
void function1( ) { cout << "function1 called on object " << this << endl; }
void function2( ) { cout << "function2 called on object " << this << endl; }
void function3( ) { cout << "function3 called on object " << this << endl; }
void function4( ) { cout << "function4 called on object " << this << endl; }
} ;
MyClass globalglass;
void global_function_call( void ( MyClass:: * method) ( ) )
{
( globalglass.* method) ( ) ;
}
int main( )
{
cout << "address of globalglass: " << & globalglass << endl;
global_function_call( & MyClass:: function1 ) ;
global_function_call( & MyClass:: function2 ) ;
global_function_call( & MyClass:: function3 ) ;
global_function_call( & MyClass:: function4 ) ;
return 1 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgTXlDbGFzcyB7CiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBmdW5jdGlvbjEoKXsgY291dCA8PCAiZnVuY3Rpb24xIGNhbGxlZCBvbiBvYmplY3QgIiA8PCB0aGlzIDw8IGVuZGw7IH0KICAgICAgICB2b2lkIGZ1bmN0aW9uMigpeyBjb3V0IDw8ICJmdW5jdGlvbjIgY2FsbGVkIG9uIG9iamVjdCAiIDw8IHRoaXMgPDwgZW5kbDsgfQogICAgICAgIHZvaWQgZnVuY3Rpb24zKCl7IGNvdXQgPDwgImZ1bmN0aW9uMyBjYWxsZWQgb24gb2JqZWN0ICIgPDwgdGhpcyA8PCBlbmRsOyB9CiAgICAgICAgdm9pZCBmdW5jdGlvbjQoKXsgY291dCA8PCAiZnVuY3Rpb240IGNhbGxlZCBvbiBvYmplY3QgIiA8PCB0aGlzIDw8IGVuZGw7IH0KfTsKCk15Q2xhc3MgZ2xvYmFsZ2xhc3M7Cgp2b2lkIGdsb2JhbF9mdW5jdGlvbl9jYWxsKHZvaWQgKE15Q2xhc3M6OiptZXRob2QpKCkpCnsKICAgIChnbG9iYWxnbGFzcy4qbWV0aG9kKSgpOwp9CgppbnQgbWFpbigpCnsKCWNvdXQgPDwgImFkZHJlc3Mgb2YgZ2xvYmFsZ2xhc3M6ICIgPDwgJmdsb2JhbGdsYXNzIDw8IGVuZGw7CgkKICAgIGdsb2JhbF9mdW5jdGlvbl9jYWxsKCZNeUNsYXNzOjpmdW5jdGlvbjEpOyAKICAgIGdsb2JhbF9mdW5jdGlvbl9jYWxsKCZNeUNsYXNzOjpmdW5jdGlvbjIpOwogICAgZ2xvYmFsX2Z1bmN0aW9uX2NhbGwoJk15Q2xhc3M6OmZ1bmN0aW9uMyk7CiAgICBnbG9iYWxfZnVuY3Rpb25fY2FsbCgmTXlDbGFzczo6ZnVuY3Rpb240KTsKCiAgICByZXR1cm4gMTsgICAKfQ==