public member function
<functional>

std::function::operator()

Ret operator()(Args... args) const;
调用目标
调用 target 可调用对象,转发 args 作为参数。

效果取决于 function 对象所指向的可调用对象的类型。

  • 如果 target 是一个函数指针函数对象,它会被调用,将参数转发给调用。
  • 如果 target 是一个非静态成员函数的指针,它会被调用,使用第一个参数作为调用该成员的对象(这可以是对象、引用或其指针),其余参数被转发为成员函数的参数。
  • 如果是一个非静态数据成员的指针,它应该使用单个参数进行调用,函数返回对该参数成员的引用(该参数可以是对象、引用或其指针)。
  • 如果对象没有 target(它是一个空函数),则抛出 bad_function_call 异常。

参数

args...
调用的参数。
如果 function 对象所指向的可调用对象的类型是成员指针,第一个参数应为一个定义了该成员的对象(或其引用或指针)。

Args... 是用作类模板参数的签名中指定的参数类型。

返回值

调用结果,类型为 Ret
如果 Retvoid,则函数不返回值。

Ret 是用作类模板参数的签名中指定的返回类型(作为成员类型 function::result_type 别名)。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// function::operator() example
#include <iostream>     // std::cout
#include <functional>   // std::function, std::plus, std::minus, std::multiplies

int main () {
  // an array of functions:
  std::function<int(int,int)> fn[] = {
    std::plus<int>(),
    std::minus<int>(),
    std::multiplies<int>()
  };

  for (auto& x: fn) std::cout << x(10,5) << '\n';

  return 0;
}

输出
15
5
50


数据竞争

同时访问该对象及其 function::target

异常安全

提供与调用目标可调用对象相同的级别。
如果 function 对象为空(即它不可调用),则会抛出 bad_function_call 异常。

另见