C++表驱动法代码示例

来源:互联网 发布:体育赛事直播网络电视 编辑:程序博客网 时间:2024/06/10 21:57
// 3个文件,Client.cpp, TableDrave.h, TableDrive.cpp// vvvvv Client.cpp begin// ------------------------------------------------------------// Name         :   Client.cpp// Description  :   调用接口// History      : // ------------------------------------------------------------#include    "TableDrive.h"// ------------------------------------------------------------int main(){    TableDrive test;        test.HandleKeyword(KEYWORD_A);    test.HandleKeyword(KEYWORD_B);    test.HandleKeyword(KEYWORD_C);    test.HandleKeyword(KEYWORD_START);    test.HandleKeyword(KEYWORD_D);        return 0;}// ^^^^^ Client.cpp end // vvvvv TableDrive.h begin// ------------------------------------------------------------// Name         :   TableDrive.h// Description  :   表驱动头文件// History      :   // ------------------------------------------------------------#ifndef     _TEST_DRIVE_H#define     _TEST_DRIVE_H#include    <map>// ------------------------------------------------------------// 测试用关键字enum KEYWORD{    KEYWORD_START = -1,        KEYWORD_A = 0,    KEYWORD_B,    KEYWORD_C,    KEYWORD_D,          KEYWORD_END,};// ------------------------------------------------------------// 可以使用 std:: 单个引用using namespace std;class TableDrive{public:     // ------------------------------------------------------------    // Description :     //      根据关键字,执行处理函数    // Parameters :     //      string keyword,关键字    // Return Value :     //      bool,true,函数执行成功,false,找不到键字对应的函数,或函数执行失败    // Errors :     //      无    // ------------------------------------------------------------     bool HandleKeyword(int keyword);        // ------------------------------------------------------------    // Description :     //      关联关键字到处理函数    // Parameters :     //      无    // Return Value :     //      bool,true,正常,false,异常    // Errors :     //      无    // ------------------------------------------------------------     bool MapKeyToHandle();          TableDrive();        ~TableDrive();    private:        // vv 处理函数,true,执行成功,false,执行失败    bool HandleKeyA();    bool HandleKeyB();    bool HandleKeyC();    // ^^    private:    // :TRICKY: 成员函数指针定义    typedef bool (TableDrive:: *PHandle)(void);    map<int, PHandle>   m_KeyToHandle;      // 关键字对应处理函数};#endif// ^^^^^ TableDrive.h end // vvvvv TableDrive.cpp begin// ------------------------------------------------------------// Name         :   TableDrive.cpp// Description  :   表驱动实现文件// History      : // ------------------------------------------------------------#include    <stdio.h>#include    "TableDrive.h"// ------------------------------------------------------------// 根据关键字,执行处理函数bool TableDrive::HandleKeyword(int keyword){    typedef map<int, PHandle>::const_iterator CI;    CI iter = m_KeyToHandle.find(keyword);    // 没有搜索到关键字    if (m_KeyToHandle.end() == iter)    {        printf("\n  @@ search Keyword %d fail!\n", keyword);        return false;    }    // :TRICKY: 注意成员函数指针的引用格式    PHandle pFunction = iter->second;    return (this->*pFunction)();}TableDrive::TableDrive(){    printf("\n  vv TableDrive::TableDrive()\n");    MapKeyToHandle();}TableDrive::~TableDrive(){    printf("\n  ^^ TableDrive::~TableDrive()\n");}// ------------------------------------------------------------// 关联关键字到处理函数bool TableDrive::MapKeyToHandle(){    m_KeyToHandle[KEYWORD_A]    = &TableDrive::HandleKeyA;    m_KeyToHandle[KEYWORD_B]    = &TableDrive::HandleKeyB;    m_KeyToHandle[KEYWORD_C]    = &TableDrive::HandleKeyC;            return true;}// 处理函数 Abool TableDrive::HandleKeyA(){    printf("\n  ** A, HandleKeyA()\n\n");        return true;}bool TableDrive::HandleKeyB(){    printf("\n  ** B, HandleKeyB()\n\n");        return true;}bool TableDrive::HandleKeyC(){    printf("\n  ** C, HandleKeyC()\n\n");        return true;}// ^^^^^ TableDrive.cpp end


 

原创粉丝点击