将函数作为参数传递给另一个函数的不同方式有什么区别?

问题描述 投票:6回答:2

我遇到一个功能调用多个可能功能之一的情况。这似乎是传递函数作为参数的好地方。 Zubkov在此Quoara answer中使用三种方法来执行此操作。

int g(int x(int)) { return x(1); }
int g(int (*x)(int)) { return x(1); }
int g(int (&x)(int)) { return x(1); }
...
int f(int n) { return n*2; }
g(f); // all three g's above work the same

何时应使用哪种方法?有什么区别?我更喜欢simplest approach,为什么不总是使用第一种方法?

对于我来说,该函数仅被调用一次,我想使其保持简单。我有它与按指针传递一起工作,我只是用g(myFunc)调用它,其中myFunc是最后被调用的函数。

c++ function parameter-passing
2个回答
2
投票

扩展L.F.的注释,通常最好完全避开函数指针,并在可调用对象(定义operator()的对象)方面工作。以下所有内容均允许您执行此操作:


-2
投票

正如您链接到的Quora问题中所指出的那样,前两个选项使用函数指针,最后一个选项使用函数引用。

© www.soinside.com 2019 - 2024. All rights reserved.