是否有一种方法可以通过引用来防止lambda捕获

Is there a way to prevent lambda capture by reference

本文关键字:引用 捕获 lambda 可以通过 方法 一种 是否      更新时间:2023-10-16

我正在重构依赖lambda的现有代码。在新版本的代码中,我想推迟对lambdas的调用,所以我想防止任何未来的用户意外地通过引用捕获,以及使用编译器找到所有有问题的现有代码。

这在c++11中可能吗?

No。而且它不会有太大帮助:一旦生命周期超过当前作用域,您必须同时按值捕获,以确保所有指针或引用(以任何方式)资源的生命周期都得到管理。

异步回调与同步回调是一种本质上不同的东西,c++类型系统无法在这里强制执行安全性。

即使资源生命周期问题得到解决,调用代码也期望由lambda引起的更改立即发生,但现在它们没有发生。每次使用都必须为新模式进行审计。

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

这是可能的,但是不平凡的使用libtools/clang插件——但可能不是你期望的那样。

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