public member function
<functional>

std::function::target_type

const type_info& target_type() const noexcept;
Target type_info
返回标识目标类型的 type_info 对象。

此函数返回的结果与对用作目标可调用对象的类型应用 typeid 运算符的结果相同。

如果对象没有目标(即,它是一个空函数),则此函数返回 typeid(void)

请注意,function 的单个类型实例化能够持有具有相同调用签名的不同目标类型:例如,同一个 function 对象可以持有函数指针或函数对象。

参数



返回值

对应于目标类型的 type_info 对象,如果对象是空函数,则返回 typeid(void)

type_info 是在头文件 <typeinfo> 中定义的类型,可用于比较类型。

示例

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
26
27
28
29
// function::target_type example
#include <iostream>     // std::cout, std::boolalpha
#include <functional>   // std::function, std::plus, std::minus
#include <typeinfo>     // typeid

int  plus_function(int a, int b) {return a+b;}
int minus_function(int a, int b) {return a-b;}

int main () {
  std::function<int(int,int)> plus1  = plus_function;
  std::function<int(int,int)> plus2  = std::plus<int>();
  std::function<int(int,int)> minus1 = minus_function;
  std::function<int(int,int)> minus2 = std::minus<int>();

  std::cout << "pointers as targets:\n" << std::boolalpha;
  std::cout << "plus1 : " << ( plus1.target_type()==typeid(int(*)(int,int))) << '\n';
  std::cout << "plus2 : " << ( plus2.target_type()==typeid(int(*)(int,int))) << '\n';
  std::cout << "minus1: " << (minus1.target_type()==typeid(int(*)(int,int))) << '\n';
  std::cout << "minus2: " << (minus2.target_type()==typeid(int(*)(int,int))) << '\n';
  std::cout << '\n';

  std::cout << "same type?:\n";
  std::cout << "(plus1, plus2) : " << ( plus1.target_type()== plus2.target_type()) << '\n';
  std::cout << "(minus1,minus2): " << (minus1.target_type()==minus2.target_type()) << '\n';
  std::cout << "(plus1, minus1): " << ( plus1.target_type()==minus1.target_type()) << '\n';
  std::cout << "(plus2, minus2): " << ( plus2.target_type()==minus2.target_type()) << '\n';

  return 0;
}

输出
pointers as targets:
plus1 : true
plus2 : false
minus1: true
minus2: false

same type?:
(plus1, plus2) : false
(minus1,minus2): false
(plus1, minus1): true
(plus2, minus2): false


数据竞争

该对象被访问。

异常安全

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

另见