- #include <iostream> 
- using namespace std; 
-   
- struct IFoo{ 
- 	virtual void doWork() = 0;	 
- }; 
-   
- template<class T> 
- struct MemberFuncFoo : public IFoo{ 
- 	typedef void (T::*FuncType)(); 
-   
- 	MemberFuncFoo(T *instance, FuncType memberFunc): 
- 		m_instance(instance), 
- 		m_memberFunc(memberFunc) 
- 	{} 
-   
- 	virtual void doWork() override{ 
- 		(m_instance->*m_memberFunc)(); 
- 	} 
-   
- private: 
- 	T* m_instance; 
- 	FuncType m_memberFunc; 
- }; 
-   
- struct Bar{ 
- 	void baz(){ 
- 		cout << "baz" << endl;		 
- 	} 
- }; 
-   
- int main() { 
- 	Bar bar; 
- 	IFoo *ptr = new MemberFuncFoo<Bar>(&bar,&Bar::baz); 
- 	ptr->doWork(); 
- 	// your code goes here 
- 	return 0; 
- } 
				I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IElGb297Cgl2aXJ0dWFsIHZvaWQgZG9Xb3JrKCkgPSAwOwkKfTsKCnRlbXBsYXRlPGNsYXNzIFQ+CnN0cnVjdCBNZW1iZXJGdW5jRm9vIDogcHVibGljIElGb297Cgl0eXBlZGVmIHZvaWQgKFQ6OipGdW5jVHlwZSkoKTsKCQoJTWVtYmVyRnVuY0ZvbyhUICppbnN0YW5jZSwgRnVuY1R5cGUgbWVtYmVyRnVuYyk6CgkJbV9pbnN0YW5jZShpbnN0YW5jZSksCgkJbV9tZW1iZXJGdW5jKG1lbWJlckZ1bmMpCgl7fQoJCgl2aXJ0dWFsIHZvaWQgZG9Xb3JrKCkgb3ZlcnJpZGV7CgkJKG1faW5zdGFuY2UtPiptX21lbWJlckZ1bmMpKCk7Cgl9CgkKcHJpdmF0ZToKCVQqIG1faW5zdGFuY2U7CglGdW5jVHlwZSBtX21lbWJlckZ1bmM7Cn07CgpzdHJ1Y3QgQmFyewoJdm9pZCBiYXooKXsKCQljb3V0IDw8ICJiYXoiIDw8IGVuZGw7CQkKCX0KfTsKCmludCBtYWluKCkgewoJQmFyIGJhcjsKCUlGb28gKnB0ciA9IG5ldyBNZW1iZXJGdW5jRm9vPEJhcj4oJmJhciwmQmFyOjpiYXopOwoJcHRyLT5kb1dvcmsoKTsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCXJldHVybiAwOwp9