C++ 类成员函数指针
之前在设计指令类的时候,需要对传入的指令和参数进行解析和执行。
有点类似于int main(int argc, char** argv)
。
这种类的成员函数有一个特点:数量多,返回值和参数列表大多相同。而且他们的函数名一一对应指令集(一个由指令字符串构建的数组)。
之前一直是用switch
语句来判断具体执行那一个成员函数。这种方法写起来的代码非常长,也很容易漏掉break
。
后来就想到用函数指针来解决这个问题。可以直接创建一个关于类的成员函数指针数组,通过下标的方式来确定具体执行的是哪一个成员函数。
首先创建一个中介函数,让中介函数判断应该调用哪个功能函数。
成员函数指针和普通函数指针有所不同。
具体实现如下
#include <iostream>
#include <vector>class test
{
public:test(int a){this->data = a;// 中介函数this->pShow(this);}// 中介函数必须为静态staticstatic void pShow(test *t){// 创建指向函数show的指针// 注意:此指针可以对不同的对象进行操作,调用的成员函数属于传入的类指针指向的对象的成员函数void (test::*p)(void) = &test::show;// 调用t指向对象的show(t->*p)();// 成员函数指针数组,注意vector的模板类型// 数组中的函数,返回值和参数列表必须相同const std::vector<void (test::*)(void)> funcs = {&test::show,&test::delete_data};// 调用t对象的delete_data(t->*funcs[1])();// 调用t对象的show(t->*funcs[0])();}private:void show(){printf("%d", this->data);}void delete_data(){data = 0;}
private:int data;
};int main(void)
{test t(314159), t2(123456);return 0;
}