public member function
<functional>

std::function::target

template <class TargetType>       TargetType* target() noexcept;template <class TargetType> const TargetType* target() const noexcept;
获取目标对象的指针
返回存储在 function 对象中的*可调用对象*的指针。

由于 function 是一个多态包装类,它不知道其目标*可调用对象*的静态类型,因此必须显式指定模板参数 TargetType

TargetType 应与目标类型匹配,以便 typeid(TargetType)==target_type()。否则,该函数总是返回*空指针*。

参数



返回值

如果 typeid(TargetType) 与成员 target_type 返回的值相等,则返回*目标可调用对象*的指针。
否则,返回*空指针*。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// function::target example
#include <iostream>     // std::cout, std::boolalpha
#include <functional>   // std::function, std::plus, std::minus

int my_plus (int a, int b) {return a+b;}
int my_minus (int a, int b) {return a-b;}

int main () {
  std::function<int(int,int)> foo = my_plus;
  std::function<int(int,int)> bar = std::plus<int>();

  // calling using functional form:
  std::cout << foo(100,20) << '\n';
  std::cout << bar(100,20) << '\n';

  // calling by invoking target:
  std::cout << (*foo.target<int(*)(int,int)>())(100,20) << '\n';
  std::cout << (*bar.target<std::plus<int>>())(100,20) << '\n';

  // changing target directly:
  *foo.target<int(*)(int,int)>() = &my_minus;
  std::cout << foo(100,20) << '\n';

  return 0;
}

输出
120
120
120
120
80


数据竞争

同时访问对象及其目标。
返回的指针可用于访问或修改目标*可调用对象*。

异常安全

无异常保证:此成员函数从不抛出异常。

另见