int foo_plus(int a, int b)
{
return a + b;
}
int foo_multiply(int a, int b)
{
return a * b;
}
typedef int OP(int, int);
OP* foo(char c)
{
OP* p;
switch(c) {
case 'p':
p = foo_plus;
break;
case 'm':
p = foo_multiply;
break;
default:
p = foo_multiply;
}
return p;
}
int main()
{
OP* f;
int n;
f = foo('p');
n = f(1, 2);
printf("%d", n); // 3
f = foo('m');
n = f(1, 2);
printf("%d", n); // 2
return 0;
}
补充: 函数返回 一个对象,这个对象是可被调用的。
一个函数对象,即一个重载了括号操作符“()”的对象。 e.g.
class A{
public:
int operator()(int x, int y)
{
return x + y;
}
一个指向函数的指针,如
p 是一个指向函数的指针,这种函数有两个 int 类型的参数,返回 int。
可以用以下两种方式定义返回函数指针的函数。
直接定义
用typedef
两种方式等价,第二种更容易看清楚。
返回的就是 指向函数的指针。
应用例子
补充:
函数返回 一个对象,这个对象是可被调用的。
一个函数对象,即一个重载了括号操作符“()”的对象。
e.g.
class A{
};
A a;
a(1, 2); 的效果跟上文 中的 foo_plus(1, 2); 相当。
可调用对象主要包含函数指针、std::function和重载了元括号运算符的类/结构。