C++14::lambda函数的类型
2015-11-15 13:17
323 查看
问题
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语言中内联函数的作用
- (ZT)C语言运算符号优先级图表
- randstr随机字符串(VC++)
- [C++]时间格式转换器24转为12(class)
- QML与C++的交互
- C++11新标准:auto关键字
- c++ 的vector、array和数组的比较
- 操作系统实验二 进程管理
- C语言编程技巧
- C语言位运算
- HDU 5198 水 c语言
- 【c++】size_t 和 size_type的区别
- Introduce to algorithm--------pseudo code to C/C++ code (chapter 23)
- C++面向对象高级开发_极客班_第一节课笔记
- 带你玩转Visual Studio——命令行编译C/C++程序
- C++类的内联成员函数应放在哪
- 《并查集》hdu acm 5.1.6 c++ set
- Socket心跳包异常检测的C语言实现,服务器与客户端代码案例
- 12.c/c++程序员面试宝典-异常与错误
- C++11实现模板化(通用化)RAII机制