当前位置: 首页 > 知识库问答 >
问题:

为什么我们在C中使用std::function而不是原始的C函数指针?[重复]

夏谦
2023-03-14

< code>std::函数的优点是什么

共有3个答案

鄢晔
2023-03-14

除了更整洁的外观和更具描述性的语法,< code>std::function还可以存储任何可调用的对象:

  • 功能
  • λ 表达式
  • 绑定表达式
  • 函子

更不用说存储、复制和绑定对象到成员函数要容易得多,也更直观。

仉昂熙
2023-03-14

< code>std::function可以保存函数对象(包括lambdas)以及带有正确签名的函数指针。所以更百搭。

颜祖鹤
2023-03-14

std::function可以容纳多个函数指针,即函子。

#include <functional>

void foo(double){}

struct foo_functor{
  void operator()(float) const{}
};

int main(){
  std::function<void(int)> f1(foo), f2((foo_functor()));
  f1(5);
  f2(6);
}

关于艾迪奥内的现场例子。

如示例所示,您也不需要完全相同的签名,只要它们是兼容的(即,std::function的参数类型可以传递给包含的函数/仿函数)。

 类似资料:
  • 在 C 中实现回调函数时,我是否仍应使用 C 样式函数指针: 或者我应该使用std::函数:

  • 本文向大家介绍为什么我们在C ++中通过引用传递指针?,包括了为什么我们在C ++中通过引用传递指针?的使用技巧和注意事项,需要的朋友参考一下 如果需要修改指针而不是指针指向的对象,则可以按引用传递指针。 这是如何通过引用传递指针的示例- 示例 输出结果

  • > < li> 有什么不同吗? “保存/转移”功能的最佳方式是什么?

  • 本文向大家介绍c++11 符号修饰与函数签名、函数指针、匿名函数、仿函数、std::function与std::bind,包括了c++11 符号修饰与函数签名、函数指针、匿名函数、仿函数、std::function与std::bind的使用技巧和注意事项,需要的朋友参考一下 一、符号修饰与函数签名 1、符号修饰 编译器将c++源代码编译成目标文件时,用函数签名的信息对函数名进行改编,形成修饰名。G

  • 问题内容: 我正在阅读Java JDBC规范(版本4),并且遇到了以下语句: DataSource-此接口在JDBC 2.0可选软件包API中引入。它优于DriverManager,因为它允许有关基础数据源的详细信息对应用程序透明 我想了解的是a 和a 之间的区别以及它为什么存在。我的意思是,上面的代码块说关于数据源的详细信息对于应用程序是透明的,但是是否不会在属性文件中外部化数据库属性(例如用户

  • 我试图理解的是和之间的区别,以及它存在的原因。我的意思是,上面的块表明关于数据源的细节对应用程序是透明的,但是在属性文件中外部化数据库属性如用户名、密码、url等,然后使用DriverManager是否会以同样的方式工作? 创建接口是否只是为了有一种返回可以池化的连接的通用方式?在Java EE中,应用程序服务器是否实现了这个接口,并且部署的应用程序是否具有对数据源的引用而不是连接?