以下全是作者自己口胡, 持有不同意见之处请当面提出,
在 C++技术网 首发, 随后会出现在作者本人的 CSDN Blog 上, 禁止转载!
首先先强化个概念, C/C++ 是强类型语言, 也就是, 类型, 变量在编译的时候已经被定义, 当然也有一些类似派生的语法, 但根本上是一样的, 类型是要在编译时期定义.
就好像
int a = 666;
char* = "Hey!";
那么, 函数也是一样, 可以被变量化, 我们称之为函数指针
int Add(int a, int b)
{
return a + b;
}
typedef int(*pAdd)(int, int);
int main()
{
pAdd pa = Add;
pa(1, 2);
}
那么你可能会想. 这又有啥用?
假设有这么一种情况, 你写了一个异步函数.
你在函数执行完之后要通知你的调用者, 但你的调用者可能有很多种, 而且你在编码的时候并不知道他是谁,
此时你只要跟他约定好, "我执行完成时会调用一个什么返回类型, 什么参数的函数, 你自己去写那个响应函数, 只要跟我们约定的格式一样就行"
比如像下面这样
#include <iostream>
#include <string>
using namespace std;
typedef void (*pCatAction)(std::string );
void PlayCat(std::string strAction, pCatAction action)
{
action(strAction);
}
void LihuaCatAction(string action)
{
if (action == "touch")
{
printf("挠死你");
}
else if(action == "feed")
{
printf("亲近");
}
}
void PussyCatAction(string action)
{
if (action == "touch")
{
printf("亲近");
}
else if(action == "feed")
{
printf("粘人");
}
}
int main()
{
PlayCat("touch", LihuaCatAction);
PlayCat("touch", PussyCatAction);
}
这样就非常灵活了.
下一篇我们将讲一下, 带不定参数的函数指针要怎么玩, 请期待 奶茶同学带你玩函数指针 - 不定参数篇
希望对你有所帮助.