Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;使用函数作为参数_C++ - Fatal编程技术网

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@GoswinvonBrederlow
std::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;
}