std::invoke_result是C++17中的一個(gè)模板類,可以用來(lái)獲取調(diào)用特定函數(shù)對(duì)象或函數(shù)指針后的返回值類型。它接受一個(gè)可調(diào)用對(duì)象類型和參數(shù)類型作為模板參數(shù),并提供一個(gè)嵌套成員類型,表示調(diào)用該可調(diào)用對(duì)象后的返回值類型。
使用std::invoke_result可以方便地獲取函數(shù)對(duì)象或函數(shù)指針的返回值類型,無(wú)需手動(dòng)推斷或指定返回值類型。這在編寫模板代碼時(shí)非常有用,因?yàn)榭梢员苊庵貜?fù)編寫相同的返回值類型推斷邏輯。
例如,假設(shè)有一個(gè)函數(shù)對(duì)象foo,可以通過(guò)以下方式獲取它的返回值類型:
#include <type_traits>
#include <iostream>
struct foo {
int operator()(int x) {
return x * 2;
}
};
int main() {
std::invoke_result<foo, int>::type result;
std::cout << typeid(result).name() << std::endl; // 輸出int
return 0;
}
在這個(gè)例子中,std::invoke_result<foo, int>::type將返回int類型,因?yàn)閒oo的operator()函數(shù)返回一個(gè)int值。通過(guò)std::invoke_result,我們可以輕松地獲取foo函數(shù)對(duì)象的返回值類型,而無(wú)需手動(dòng)指定。