我是靠谱客的博主 瘦瘦微笑,最近开发中收集的这篇文章主要介绍std::function简介1. 简介2. 基本使用参考文献,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1. 简介

std::function是一个函数对象的包装器,std::function的实例可以存储,复制和调用任何可调用的目标,包括:

  • 函数。
  • lamada表达式。
  • 绑定表达式或其他函数对象。
  • 指向成员函数和指向数据成员的指针。

所存储的可调用对象被称为目标的std::function。如果一个std::function实例不包含目标,则将其称为空。调用空的std::function对象会导致抛出异常std::bad_function_call。

std::function满足CopyConstructible和CopyAssignable的要求。

std::function对象没有初始化任何实际的可调用元素,调用std::function对象将抛出std::bad_function_call异常。

2.1. Member types

成员类型说明
result_type返回类型
argument_type如果函数对象只有一个参数,那么这个代表参数类型。
first_argument_type如果函数对象有两个个参数,那么这个代表第一个参数类型。
second_argument_type如果函数对象有两个个参数,那么这个代表第二个参数类型。

2.2. Member functions

成员函数声明说明
constructor构造函数:constructs a new std::function instance
destructor析构函数: destroys a std::function instance
operator=给定义的function对象赋值
operator bool检查定义的function对象是否包含一个有效的对象
operator()调用一个对象

2. 基本使用

#include <iostream>
#include <functional>

int fun(int a, int b, int c, int d) {
  std::cout << a << std::endl;
  std::cout << b << std::endl;
  std::cout << c << std::endl;
  std::cout << d << std::endl;
  return 0;
}

class CCaller {
public:
  int operator()(int a, int b, int c, int d) {
  std::cout << a << std::endl;
  std::cout << b << std::endl;
  std::cout << c << std::endl;
  std::cout << d << std::endl;
  return 0;
}
};

int main() {
  CCaller Caller;
  std::function<int(int, int, int, int)> f;

  f = [](int a, int b, int c, int d) -> int
  {
    std::cout << a << std::endl;
    std::cout << b << std::endl;
    std::cout << c << std::endl;
    std::cout << d << std::endl;
    return 0;
  };
  f(1, 2, 3, 4);

  f = Caller;
  f(10, 20, 30, 40);

  f = fun;
  f(100, 200, 300, 400);

  return 0;
}

从上面我们可以发现,std::function可以表示函数,lamada,可调用类对象。

参考文献

C++ std::function技术浅谈_xdesk的博客-CSDN博客

C++ std::function介绍和使用_jinzhu1911的博客-CSDN博客

http://www.cplusplus.com/reference/functional/function/

最后

以上就是瘦瘦微笑为你收集整理的std::function简介1. 简介2. 基本使用参考文献的全部内容,希望文章能够帮你解决std::function简介1. 简介2. 基本使用参考文献所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部