在Cpp中,函数名不可以作为形参或者返回参数,但是函数指针可以
#include <iostream>
#include<initializer_list>
using namespace std;
void show(string s, int i) {
while (i--) cout << s << endl;
}
// 返回函数指针
// decltype返回的是函数类型,而函数只能返回函数指针
decltype(show) *getShow() {
return show;
}
auto getShow2() -> void (*)(string, int) {
return show;
}
// F是函数名
typedef decltype(show) F;
// PF是函数指针
typedef decltype(show) *PF;
using FF = decltype(show);
using PFF = decltype(show) *;
using FFF = void(string, int);
using PFFF = void (*)(string, int);
void recvFunc(void(*f)(string, int), string s, int i) {
f(s, i);
}
void recvFunc2(PFF f, string s, int i) {
f(s, i);
}
void recvFunc3(F *f, string s, int i) {
f(s, i);
}
int main() {
void (*f1)(string, int);
void (*f2)(string, int);
// 对于函数指针,show 和 &show是等价的
f1 = show;
f2 = &show;
f1("Hello", 1);
f2("World !", 2);
F *f3 = show;
PF f4 = show;
f3("Hello", 1);
f4("World !", 2);
FF *f5 = show;
PFF f6 = show;
f5("Hello", 1);
f6("World !", 2);
recvFunc(show, "Do!", 3);
recvFunc2(show, "HA!", 3);
recvFunc3(show, "LA!", 3);
FFF *f7 = show;
PFFF f8 = show;
}