⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 methodptr.h

📁 c++成员指针的例子
💻 H
字号:
// MFCMethodPointer.h: interface for the MFCMethodPointer class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_MFCMETHODPOINTER_H__67CE3765_BEB6_11D2_A18B_00609784F50B__INCLUDED_)
#define AFX_MFCMETHODPOINTER_H__67CE3765_BEB6_11D2_A18B_00609784F50B__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "MethodPtrBase.h"

// r = return type
// o = object definition
// m = method
#define METHOD(r,o,m)  (r (o::*)() )(&o::m)

// O = object definition
// R = return type
template <class O, class R>
class CMethodPtr : public CMethodPtrBase<R>
{
	typedef R (O::*PMETHOD)();
	typedef R (O::*PMETHOD1)(LPVOID);
	typedef R (O::*PMETHOD2)(LPVOID, LPVOID);

public:
	CMethodPtr(O* pObject, PMETHOD pMethod) : m_pObject( pObject ), m_pMethod( pMethod ) {};

	// Member Variables
private:
	O*	m_pObject;	// pointer to an object
	PMETHOD	m_pMethod;	// pointer to the method

	//Implementation
public:
	void SetObject( O* pObject ) { m_pObject = pObject; }
	void SetMethod( PMETHOD pMethod ) { m_pMethod = pMethod; }

	// 0 args
	virtual R CallMethod()
	{
		return (m_pObject->*m_pMethod)();
	}

	// 1 arg
	virtual R CallMethod(LPVOID arg1)
	{
		return (m_pObject->*(PMETHOD1)m_pMethod)(arg1);
	}

	// 2 args
	virtual R CallMethod(LPVOID arg1, LPVOID arg2)
	{
		return (m_pObject->*(PMETHOD2)m_pMethod)(arg1, arg2);
	}
};

#endif // !defined(AFX_MFCMETHODPOINTER_H__67CE3765_BEB6_11D2_A18B_00609784F50B__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -