【发布时间】:2014-02-09 09:53:08
【问题描述】:
我想知道是否有一种标准方法来获取任何给定 lambda 的参数的类型签名(即返回类型和类型)?
我问的原因是我一直想知道 auto 在声明中的确切类型是什么,例如 auto l =[](int x,int y)->int{return x+y;}。在auto 的其他用例中,对于较长的类型名称,它是一种方便且较短的替代方案。但是对于 lambdas,是否还有另一种声明 lambda 变量的方法?
我的理解是,一个标准的 lambda 只不过是一个函数对象,它是它自己的类型。因此,即使两个 lambda 具有相同的返回类型和参数类型,它们仍然是两个不同的、不相关的类/函子。但这有办法捕捉它们在类型签名方面相同的事实吗?
我认为我正在寻找的类型签名可能类似于正确类型的 std::function<> 对象。
一个更有用/涉及的问题是,如果可以提取类型签名,则可以编写一个通用包装函数将任何 lambda 函数转换为具有相同类型签名的 std::function 对象。
【问题讨论】: