今天发现了一种写法,顺便记录一下。废话不多说,先看代码:
#include <iostream>
using namespace std;
int addition(int x, int y){
return x + y;
}
int subtraction(int x, int y){
return x - y;
}
int operation(int x, int y, int (*function)(int, int)){
return (*function)(x, y);
}
int main(){
int answer = operation(1, 2, addition);
cout << answer;
}
在这里我们可以将(*function)视为函数的指针,直接将函数名称传进去,但是内部获取的是指针,而不是函数本身,所以不用担心这么做是把函数拷贝一份浪费了内存的空间。
网上有一些用typedof方法的实现,其实也可以,但是这种方法相对更加简洁一些。对了,上面的
int answer = operation(1, 2, addition);
addition也可以加上&,但其实都一样。编译器会自己读取地址。
对了,我上次发的那个在线编译器只支持c++98,如果想要在线测试比较新的c++功能,比如c++11或者c++14,那么可以访问http://cpp.sh/ (国内的网站可能打开会慢一些)上次国内的那个网站连一个输入函数都实现不了,这个是可以输入的,所以功能上要比上次那个好很多,哈哈。