#define declareMemberFunctionSelectionTable\
(returnType,baseType,memberFunction,argNames,argList,parList) \
\
/* Construct from argList function pointer type */ \
typedef returnType (*memberFunction##argNames##MemberFunctionPtr)argList; \
\
/* Construct from argList function table type */ \
typedef HashTable \
<memberFunction##argNames##MemberFunctionPtr, word, string::hash> \
memberFunction##argNames##MemberFunctionTable; \
\
/* Construct from argList function pointer table pointer */ \
static memberFunction##argNames##MemberFunctionTable* \
memberFunction##argNames##MemberFunctionTablePtr_; \
\
以上代码摘自OF的memberFunctionSelectionTable.H文件,这里定义了一个宏:
declareMemberFunctionSelectionTable
该宏用来定义一些列的类型别名及静态变量,同时还声明了一个类(代码未列出)。这里的memberFunction##argNames##MemberFunctionPtr就是一个函数指针,该指针指向一个函数该函数的返回值由宏参数returnType指明,函数的参数列表由宏参数argList指明。
接下来的代码中定义了一个HashTable的别名memberFunction##argNames##MemberFunctionTable,该HashTabel中存储的主要是memberFunction##argNames##MemberFunctionPtr,也就是一系列的函数指针,后续声明的类实现对该HashTable的构造,类的成员函数可以通过该HashTable找到特定名称的成员函数(之前保存的memberFunction##argNames##MemberFunctionPtr)这样就可以执行这些成员函数了,这些成员函数的名字一般由宏参数memberFunction指出。
评论