C++使用函数作为参数

0yycz8jy  于 2023-08-09  发布在  其他
关注(0)|答案(4)|浏览(122)

可能重复:

How do you pass a function as a parameter in C?
假设我有一个函数叫做

void funct2(int a) {

}

void funct(int a, (void)(*funct2)(int a)) {

 ;

}

字符串
调用这个函数的正确方法是什么?我需要设置什么才能让它工作?

c0vxltue

c0vxltue1#

通常,为了可读性,你可以使用typedef来定义自定义类型,如下所示:

typedef void (* vFunctionCall)(int args);

字符串
当定义这个typedef时,你希望你将指向的函数原型的返回参数类型,以 lead typedef标识符(在本例中是void类型)和原型参数以 follow 它(在本例中是“int args”)。
当使用这个typedef作为另一个函数的参数时,你可以这样定义你的函数(这个typedef几乎可以像任何其他对象类型一样使用):

void funct(int a, vFunctionCall funct2) { ... }


然后像正常函数一样使用,如下所示:

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

deyfvvtc

deyfvvtc2#

另一种方法是使用函数库。
第一个月
下面是一个例子,我们将在funct中使用funct2

#include <functional>
#include <iostream>

void displayMessage(int a) {
    std::cout << "Hello, your number is: " << a << '\n';
}

void printNumber(int a, std::function<void (int)> func) {
    func(a);
}

int main() {
    printNumber(3, displayMessage);
    return 0;
}

字符串
产出:

Hello, your number is: 3

wqsoz72f

wqsoz72f3#

一个更详细和一般的(不是抽象的)例子

#include <iostream>
    #include <functional>
    using namespace std;
    int Add(int a, int b)
    {
        return a + b;
    }
    int Mul(int a, int b)
    {
        return a * b;
    }
    int Power(int a, int b)
    {
        while (b > 1)
        {
            a = a * a;
            b -= 1;
        }
        return a;
    }
    int Calculator(function<int(int, int)> foo, int a, int b)
    {
        return foo(a, b);
    }
    int main()
    {
        cout << endl
             << "Sum: " << Calculator(Add, 1, 2);
        cout << endl
             << "Mul: " << Calculator(Mul, 1, 2);
        cout << endl
             << "Power: " << Calculator(Power, 5, 2);
        return 0;
    }

字符串

v64noz0r

v64noz0r4#

检查这个

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)
}

字符串

相关问题