如何在类中使用成员函数指针数组

本文介绍了一个基于C++的状态机解析器实现方法。通过定义一系列函数指针映射到不同的解析操作,该解析器能够根据输入字符调用相应的处理函数。文章详细展示了如何创建一个简单的解析器类,并使用函数指针表来实现不同状态之间的转换。

 #include <stdio.h>

class CScanner
{
public:
    void Func1() { printf("F(1) "); }
    void Func2() { printf("F(2) "); }
    void Func3() { printf("F(3) "); }
    // ...
    void Parse(char Token[]);
};

struct FuncItem
{
    int  FuncID;
    void (CScanner::*Func)();
};

FuncItem FuncTable[] =
{
    1,   CScanner::Func1,
    2,   CScanner::Func2,
    3,   CScanner::Func3,
    // ...
    -1,  NULL,
};

void CScanner::Parse(char Token[])
{
    while (*Token)
    {
        FuncItem* p = FuncTable;
        int ID = *Token - '0';

        while (p->Func != NULL)
        {
            if (p->FuncID == ID)
                break;
            p++;
        }

        if (p->Func != NULL)
            (this->*(p->Func))();

        Token++;
    }
}

void main()
{
    CScanner s;
    s.Parse("a123b321c");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值