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();
相關文章
- C++14 lambda 教程C++
- lambda 函式函式
- lambda函式函式
- TypeScript 函式型別TypeScript函式型別
- Python函式與lambda 表示式(匿名函式)Python函式
- 理解Python中的Lambda函式Python函式
- lambda匿名函式使用中的坑函式
- Python中的匿名函式-lambdaPython函式
- 胡說-JavaScript函式型別JavaScript函式型別
- PostgreSQL:字元——型別及函式SQL字元型別函式
- PHP:與型別有關的函式PHP型別函式
- kotlin 函式和 Lambda 表示式Kotlin函式
- jdk1.8Lambda函式表示式JDK函式
- 課時21:函式:lambda表示式函式
- jdk1.8-Lambda函式表示式JDK函式
- Kotlin 函式魔法 - lambda 表示式Kotlin函式
- 5.函式和lambda表示式函式
- 初識Lambda表示式(匿名函式)函式
- Python 序列型別以及函式引數型別Python型別函式
- 第 8 節:函式-函式型別與作用域函式型別
- 函式引數 引數定義函式型別函式型別
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter
- lambda匿名函式sorted排序函式filter過濾函式map對映函式函式排序Filter
- string型別資料的find函式型別函式
- php 的函式引數值型別限定PHP函式型別
- php的函式引數值型別限定PHP函式型別
- javascript 函式引用型別和簡單型別傳參JavaScript函式型別
- 建構函式定義的隱式型別轉換函式型別
- 一個簡單函式—Number型別轉換Date型別函式型別
- 【SQL基礎】T-SQL函式型別——系統函式SQL函式型別
- 請別誤用 TypeScript 過載函式型別TypeScript函式型別
- 檢測真實的檔案型別函式型別函式
- oracle集合型別的一些基本函式Oracle型別函式
- python基礎 filter, lambda 函式表示式PythonFilter函式
- 匿名函式(lambda)詳解 C++函式C++
- 什麼時候使用 Lambda 函式?函式
- ES6函式與Lambda演算函式
- 【碼上開學】Kotlin 的高階函式、匿名函式和 Lambda 表示式Kotlin函式