思考:
任务A可以分为三部分:A1,A2,A3
A1,A2,A3三部分顺序执行
其中A1,A3的代码是相同的
A2是灵活的
要实现上面的效果:
可以参考下面的文章
函数指针:C语言中的灵活调用_c语言 灵活使用函数指针-CSDN博客
C语言指针进阶(一)——深入详解“函
数指针”与“指针函数”-CSDN博客
void A1()
{
}
void A2_1()
{
qDebug()<<"A2_1()";
}
void A2_2()
{
qDebug()<<"A2_2()";
}
void A2_3()
{
qDebug()<<"A2_3()";
}
void A3()
{
}
void A(void (*A2)())
{
A1();
A2();
A3();
}
int main(int argc, char *argv[])
{
void (*A2)() = NULL;
A2 = A2_1;
A(A2);
A2 = A2_2;
A(A2);
A2 = A2_3;
A(A2);
return 0;
}
函数指针还挺好用嘞
-------------------------------------------------------
如果函数A2有参数呢?
void A1()
{
}
void A2_1(QByteArray &ba)
{
ba.append(1);
qDebug()<<"A2_1()";
}
void A2_2(QByteArray &ba)
{
ba.append(2);
qDebug()<<"A2_2()";
}
void A2_3(QByteArray &ba)
{
ba.append(3);
qDebug()<<"A2_3()";
}
void A3()
{
}
void A(void (*A2)(QByteArray &))
{
QByteArray ba;
ba.append(0xFF);
A1();
A2(ba);
A3();
ba.append(0xFF);
qDebug()<<ba.toHex();
}
int main(int argc, char *argv[])
{
void (*A2)(QByteArray &) = NULL;
A2 = A2_1;
A(A2);
A2 = A2_2;
A(A2);
A2 = A2_3;
A(A2);
return 0;
}
---------------------------------------------------------
如果有时候我不希望执行A2,该怎么办呢?
void A1()
{
}
void A2_1(QByteArray &ba)
{
ba.append(1);
qDebug()<<"A2_1()";
}
void A2_2(QByteArray &ba)
{
ba.append(2);
qDebug()<<"A2_2()";
}
void A2_3(QByteArray &ba)
{
ba.append(3);
qDebug()<<"A2_3()";
}
void A3()
{
}
void A(void (*A2)(QByteArray &))
{
QByteArray ba;
ba.append(0xFF);
A1();
if(A2 != NULL)A2(ba);
A3();
ba.append(0xFF);
qDebug()<<ba.toHex();
}
int main(int argc, char *argv[])
{
A(NULL);
return 0;
}
关键:
if(A2 != NULL)A2(ba);
A(NULL);
------------------------------------------------
如果我希望函数A默认就调用A(NULL);怎么办?
void A(void (*A2)(QByteArray &) = NULL)
设置一个函数参数默认值
-----------------------------------------------------------
有一个问题:
A2如果是类成员函数,必须是static类型的