C++14::lambda函式的型別
問題
auto 自動型別推導關鍵字隱去了一切有關物件型別的資訊,通過typeid關鍵字我們可查閱一般物件(甚至是函式指標)的型別資訊。
auto i = 42;
typeid(i).name() // int
double f() { return 0.;}
auto l = f;
cout << typeid(l).name() << endl;
// double (__cdecl*)(void)
typedef int(*Func)(int, int);
auto l = Func();
cout << typeid(l).name() << endl;
// int (__cdecl*)(int,int)
然而如果我們想使用typeid關鍵字檢視lambda函式的型別資訊:
lambda的型別
Lambda的型別,是個不具名function object(或稱functor)。每個lambda表示式的型別是獨一無二的。
auto l1 = []{};
auto l2 = []{};
cout << typeid(l1).name() << endl;
cout << typeid(l2).name() << endl;
// class <lambda_ba04e06061e67fcbf8089a159f12084d>
// class <lambda_1e7023d264f05a684a30712bba49d636>
除了能得到兩個物件均是lambda函式外,無法通過typeid關鍵字獲得額外的資訊。
通過模板捕獲型別
std::function<int(int, int)> returnLambda()
{
return [](int x, int y){ return x*y};
}
// #include <functional>
int main(int, char**)
{
auto lf = returnLambda();
std::cout << lf(3, 5) << std::endl;
return 0;
}
使用decltype關鍵字
auto func = []{cout << "hello world" << endl;}
// func是函式物件,而非型別
decltype(func) f;
// decltype(func)獲得物件的型別
f();
相關文章
- lambda 函式函式
- TypeScript 函式型別TypeScript函式型別
- Python函式與lambda 表示式(匿名函式)Python函式
- 理解Python中的Lambda函式Python函式
- map 和 lambda 函式函式
- kotlin 函式和 Lambda 表示式Kotlin函式
- Python 序列型別以及函式引數型別Python型別函式
- string型別資料的find函式型別函式
- python的enumerate lambda isinstance filter函式PythonFilter函式
- PostgreSQL:字元——型別及函式SQL字元型別函式
- 胡說-JavaScript函式型別JavaScript函式型別
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter
- 第 8 節:函式-函式型別與作用域函式型別
- 函式引數 引數定義函式型別函式型別
- 初識Lambda表示式(匿名函式)函式
- 5.函式和lambda表示式函式
- jdk1.8Lambda函式表示式JDK函式
- jdk1.8-Lambda函式表示式JDK函式
- 課時21:函式:lambda表示式函式
- lambda匿名函式sorted排序函式filter過濾函式map對映函式函式排序Filter
- 【Python】python map()函式和lambda表示式Python函式
- 建構函式定義的隱式型別轉換函式型別
- 【碼上開學】Kotlin 的高階函式、匿名函式和 Lambda 表示式Kotlin函式
- 請別誤用 TypeScript 過載函式型別TypeScript函式型別
- String型別函式傳遞問題型別函式
- C++ lambda 表示式與「函式物件」(functor)C++函式物件
- 匿名函式(lambda)詳解 C++函式C++
- python函式每日一講 - float函式型別轉換詳解Python函式型別
- TypeScript 學習筆記 — 函式中的型別(四)TypeScript筆記函式型別
- Python的內建函式有哪些?常見型別!Python函式型別
- [底層原理]iOS中函式的型別編碼iOS函式型別
- 函式匹配和實參型別轉換函式型別
- 資料型別與函式索引-Oracle篇資料型別函式索引Oracle
- 資料型別與函式索引-MySQL篇資料型別函式索引MySql
- 資料型別與函式索引-PostgreSQL篇資料型別函式索引SQL
- C++型別轉換建構函式C++型別函式
- PostgreSQL:數字——型別、運算子和函式SQL型別函式
- PostgreSQL:時間——型別、運算子和函式SQL型別函式
- PostgreSQL:陣列——型別、運算子和函式SQL陣列型別函式