可以将任何lambda表达式表示为(模板化)结构

时间:2015-12-17 00:17:22

标签: c++ lambda c++14 functor

我正在寻找一个反例来反驳任何lambda表达式可以表示为(模板化)结构的说法。换句话说,可以编写一个源到源编译器,它应该能够将每个lambda表达式从任何范围中提升出来并将其表达为模板化的仿函数类。

例如,就最终用户而言,以下两个是等效的:

declare

    cursor rec_tab is select table_name, COUNT(column_name) columns
    from user_tab_columns
    group by table_name;
    num_row number(6);

begin

    for ind_tab in rec_tab loop
    execute IMMEDIATE 'select COUNT(*) from '||ind_tab.table_name into num_row;
    dbms_output.put_line
        (RPAD(ind_tab.table_name,30)||' '||RPAD(ind_tab.columns,6)||num_row);
    end loop;
end;
/

可以表示为

auto foo(int parm){
  ...
  auto f = [x,&y](int z) {..};
  ..
  return foo(parm);
}

这种转变总能完成吗?如果没有,是否有一个例子可以证明这一点。谢谢!

2 个答案:

答案 0 :(得分:4)

lambda的闭包类型是一个带有重载public func request(URLRequest: URLRequestConvertible) -> Request { print("Started request: \(URLRequest.URLRequest)") .... [expr.prim.lambda]/3)的类类型。每次处理lambda表达式时,都会通过实现来完成所描述的转换

答案 1 :(得分:0)

lambda的结构和闭包不是完全等价的,因为捕获的变量不需要在struct本身中。这部分是实现定义。