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和重載了元括號運算子的類別/結構。