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


資料競爭

該物件被訪問。

異常安全

無異常保證:此成員函式從不丟擲異常。

另見