21xrx.com
2024-11-05 16:36:42 Tuesday
登录
文章检索 我的文章 写文章
如何在C++中传递函数?
2023-07-02 13:21:11 深夜i     --     --
C++ 函数 传递

在C++中,函数也可以像变量一样作为参数被传递给其他函数。这种函数作为参数被称为回调函数,它可以在调用函数时被执行,从而实现更灵活的程序设计。

要在C++中传递函数作为参数,需要使用函数指针或函数对象。函数指针是指向函数的指针变量,它包含了函数的内存地址。函数对象是一个类对象,它重载了函数调用运算符,使得这个对象可以像函数一样被调用。

使用函数指针作为函数参数的语法如下:


void function(void (*callback)());

这个函数接受一个指向函数的指针作为参数,函数指针的类型是void (*callback)(),表示这个指针指向一个没有返回值、没有参数的函数。在调用这个函数时,可以传递一个函数名作为参数,这个函数会被保存到函数指针中,并在调用函数时被执行。

使用函数对象作为函数参数的语法如下:


void function(callback obj);

这个函数接受一个函数对象作为参数,函数对象的类型是callback,它必须重载了函数调用运算符operator(),并且没有参数或者参数个数是可变的。在调用这个函数时,可以传递一个函数对象作为参数,这个对象可以像函数一样被调用,并在函数中使用。

以函数指针为例,下面是一个使用函数指针的实例:


#include <iostream>

void printHello()

  std::cout << "Hello World!" << std::endl;

void callFunction(void (*callback)())

{

  callback();

}

int main()

{

  callFunction(&printHello); // 传递一个指向printHello函数的指针

  return 0;

}

这个程序定义了一个函数printHello,它输出一句话“Hello World!”;定义了另一个函数callFunction,它接受一个指向函数的指针作为参数,并调用这个函数。在主函数中,调用了callFunction函数,并传递了指向printHello函数的指针作为参数,程序运行时会输出“Hello World!”。

除了使用函数指针和函数对象传递函数外,C++11引入了Lambda表达式,它可以在函数调用时动态定义一个函数,从而更加灵活和方便。Lambda表达式的语法如下:


[capture list](parameter list) -> return type {body}

其中,capture list表示Lambda表达式的捕获列表,parameter list表示参数列表,return type表示返回值类型,body表示Lambda表达式的函数体。

下面是一个使用Lambda表达式的实例:


#include <iostream>

void callFunction(void (*callback)())

{

  callback();

}

int main()

{

  callFunction([]() std::cout << "Hello World!" << std::endl; ); // 使用Lambda表达式作为函数参数

  return 0;

}

这个程序使用Lambda表达式作为函数调用的参数,Lambda表达式中定义了一个匿名函数,输出一句话“Hello World!”。程序运行时会输出“Hello World!”。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复