#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指出。

评论