有没有办法通过引用来防止lambda捕获

时间:2016-10-06 02:24:24

标签: c++ c++11 lambda

我正处于依赖lambda的现有代码重构的中间。在新版本的代码中,我希望将调用推迟到lambdas中,因此我希望防止任何将来的用户意外地通过引用捕获,以及使用编译器来查找所有违规行为现有代码。

c ++ 11可以实现吗?

2 个答案:

答案 0 :(得分:1)

没有。并且它没有多大帮助:一旦生命周期超过当前范围,您必须按值捕获并且确保管理所有指针或引用(以任何方式)资源的生命周期。

异步回调是一种与同步回调根本不同的野兽,而C ++类型系统无法在此强制执行安全。

即使资源生命周期问题解决了,调用代码也期望由lambda引起的更改立即发生,现在他们不会。必须对新模式进行每次使用审核。

答案 1 :(得分:0)

  

使用编译器查找所有有问题的现有代码。

这是可能的,但非平凡使用libtooling / clang插件 - 但可能不是你期望的。

您可以编写一个编译器在编译完所有代码后运行的插件,该插件可以在编译代码时检查clang构建的AST。您可以遍历AST以查找lambdas并检查其捕获列表的类型。这很酷,但文档不是很好,这可能是一个耗时的过程。可能不值得一次性项目。