C++ C++;使用函数作为参数
可能重复:C++ C++;使用函数作为参数,c++,C++,可能重复: 假设我有一个函数,名为 void funct2(int a) { } void funct(int a, (void)(*funct2)(int a)) { ; } 调用此函数的正确方法是什么?我需要设置什么才能使其工作?通常,为了可读性起见,您可以使用typedef定义自定义类型,如下所示: typedef void (* vFunctionCall)(int args); 定义此typedef时,您希望指向的函数原型的返回参数类型引导typedef标识符(在本
假设我有一个函数,名为
void funct2(int a) {
}
void funct(int a, (void)(*funct2)(int a)) {
;
}
调用此函数的正确方法是什么?我需要设置什么才能使其工作?通常,为了可读性起见,您可以使用typedef定义自定义类型,如下所示:
typedef void (* vFunctionCall)(int args);
定义此typedef时,您希望指向的函数原型的返回参数类型引导typedef标识符(在本例中为void类型),原型参数跟随它(在本例中为“int args”)
当使用此typedef作为另一个函数的参数时,您可以这样定义函数(此typedef几乎可以像任何其他对象类型一样使用):
然后像普通函数一样使用,如下所示:
funct2(a);
因此,整个代码示例如下所示:
typedef void (* vFunctionCall)(int args);
void funct(int a, vFunctionCall funct2)
{
funct2(a);
}
void otherFunct(int a)
{
printf("%i", a);
}
int main()
{
funct(2, (vFunctionCall)otherFunct);
return 0;
}
并将打印出:
2
检查这个
typedef void (*funct2)(int a);
void f(int a)
{
print("some ...\n");
}
void dummy(int a, funct2 a)
{
a(1);
}
void someOtherMehtod
{
callback a = f;
dummy(a)
}
另一种方法是使用函数库
std::function
下面是一个示例,我们将在funct
中使用funct2
:
#include <iostream>
using namespace std;
#include <functional>
void displayMessage(int a) {
cout << "Hello, your number is: " << a << endl;
}
void printNumber(int a, function<void (int)> func) {
func(a);
}
int main() {
printNumber(3, displayMessage);
return 0;
}
#包括
使用名称空间std;
#包括
无效显示消息(int a){
这个问题可能会有帮助:您有两个函数,调用哪一个函数时遇到问题?请注意,您在funct
中隐藏了函数funct2
,方法是使用一个指向函数参数的同名指针,因此您必须完全限定funct2
从内部直接调用它。Righ因为C++是C,大家都知道。欢迎使用C++Excel。如果使用C++ 11,这里有很好的读写:避免用指针传递函数提高可读性。这是C的引用问题的复制品吗?C++可能提供(或在某个点提供)。一种不同的方法。@ PoYAA13不是复制品。还有其他方法将函数作为C++中的参数,在C中是不可能的(例如使用)。因为C++ 11,宁愿使用<函数>使用VMealCuff=空隙(*)(int ARGS)。
为了更好的可读性。甚至更好,使用无需进行任何转换。由于C++11,我更希望看到std::function@GoswinvonBrederlowstd::function
比void(*)(int-args)做得更多
,因此平台更难优化为什么投反对票?代码有什么问题吗?工作示例对我很有用:)也许你应该演示调用该函数
#include <iostream>
using namespace std;
#include <functional>
void displayMessage(int a) {
cout << "Hello, your number is: " << a << endl;
}
void printNumber(int a, function<void (int)> func) {
func(a);
}
int main() {
printNumber(3, displayMessage);
return 0;
}