当前位置:C++技术网 > 资讯 > 奶茶同学带你玩函数指针 - 初见篇

奶茶同学带你玩函数指针 - 初见篇

更新时间:2016-06-15 12:57:30浏览次数:1+次

以下全是作者自己口胡, 持有不同意见之处请当面提出, 

在 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);
}


这样就非常灵活了. 


下一篇我们将讲一下, 带不定参数的函数指针要怎么玩, 请期待 奶茶同学带你玩函数指针 - 不定参数篇

希望对你有所帮助.