下面的代码是什么意思呢,请高手指点。
typedef ULONG (FUNCTION_WITH_PROGRESS)(void* pData, CProgressThreadDlg* pProgressDlg);FUNCTION_WITH_PROGRESS* m_pfnFunction;
typedef ULONG (FUNCTION_WITH_PROGRESS)(void* pData, CProgressThreadDlg* pProgressDlg);FUNCTION_WITH_PROGRESS* m_pfnFunction;
重定义类型(即别名)FUNCTION_WITH_PROGRESS* m_pfnFunction; 定义一个指向函数的指针. 我认为这样写会更好.
typedef ULONG (PFUNCTION_WITH_PROGRESS*)(void* pData, CProgressThreadDlg* pProgressDlg);PFUNCTION_WITH_PROGRESS m_pfnFunction;
可以这样认为, 后面一个函数指针 m_pfnFunction, 实际上它是 ULONG *m_pfnFunction(void* pData, CProgressThreadDlg* pProgressDlg); 你应该去看一下函数指针的部分. 这种方式之后将对 m_pfnFunction 赋予不同的真正函数地址. 这样调用 (*m_pfnFunction)(), 就相当于调用了哪个函数.
定义了一种函数类型,类似typedef struct{}StructType; 定义变量类型一样。
该函数类型返回ULONG,参数是void* pData, CProgressThreadDlg* pProgressDlg);FUNCTION_WITH_PROGRESS* m_pfnFunction;
定义一个FUNCTION_WITH_PROGRESS类型的指针实例.即函数指针。这种方式在loadlibrary动态连接库调用中经常用到
为什么要声明这个东西呢,就是为了让你方便.typedef就有这个功能.
如果你需要定义一个这样的函数.你就可以直接使用PFUNCTION_WITH_PROGRESS很方便,就和你定义一个变量一样(int a);
你定义函数的时候是这样:
PFUNCTION_WITH_PROGRESS* fun;编译器在看到这个语句时就知道fun是一个函数指针.
ULONG (FUNCTION_WITH_PROGRESS)(void* pData, CProgressThreadDlg* pProgressDlg)
是一个整体吧?这个更像是类型声明,而不是起别名,对吗?
(2)对比下面的定义
typedef set<int> MYINTSET;
这么说:ULONG (FUNCTION_WITH_PROGRESS)(void* pData, CProgressThreadDlg* pProgressDlg)相当于set<int>的位置,对吗?
(1)
typedef ULONG (FUNCTION_WITH_PROGRESS)(void* pData, CProgressThreadDlg* pProgressDlg);
FUNCTION_WITH_PROGRESS* m_pfnFunction;
(2)
typedef ULONG (PFUNCTION_WITH_PROGRESS*)(void* pData, CProgressThreadDlg* pProgressDlg);
PFUNCTION_WITH_PROGRESS m_pfnFunction
(3)直接定义
ULONG (m_pfnFunction*)(void* pData, CProgressThreadDlg* pProgressDlg);
三种方式是一个意思,对吧。