上面定义的函数原型显得有点冗长,我们可以定义函数类型,来简化上面的代码:
// 定义函数类型 typedef bool Func(const string&, const string&); typedef decltype(lengthCompare) Func; // 定义指针类型 typedef bool (*Func)(const string&, const string&); typedef decltype(lengthCompare)* Func;
有了上面的定义,我们就可以简单BigString的定义了:
const string& BigString(const string& ,const string, Func);
6,函数返回值为一个函数指针。
我们知道,函数并不能返回一个函数,但是可以返回一个指向函数的指针。
最简单的方法,我们用类型别名定义一种函数类型:
using F = int(int*,int); // F是一个返回int,接受一个指向int类型的指针和一个int类型,F是一种函数类型 using PF = int(*) (int*, int); // PF是一个函数指针类型
下面我们来定义返回函数指针的函数:
PF f(int); // f是一个函数,它返回一个函数指针 F f(int); // 错误:F是一个函数类型 F* f(int); // OK
当然我们也可以直接定义f:
int (*f(int)) (int*,int);
由内向外观察:首先f有一个形参表(int),所以f是一个函数,然后f的的左边有一个*,说明f返回的是一个指针。进一步发现,指针的类型本身也包含形参表,因此指针指向函数,该函数的返回类型是int。
我们还可以用C++11中的尾置返回类型来声明一个返回函数指针的函数: