我正处于依赖lambda的现有代码重构的中间。在新版本的代码中,我希望将调用推迟到lambdas中,因此我希望防止任何将来的用户意外地通过引用捕获,以及使用编译器来查找所有违规行为现有代码。
c ++ 11可以实现吗?
答案 0 :(得分:1)
没有。并且它没有多大帮助:一旦生命周期超过当前范围,您必须按值捕获并且确保管理所有指针或引用(以任何方式)资源的生命周期。
异步回调是一种与同步回调根本不同的野兽,而C ++类型系统无法在此强制执行安全。
即使资源生命周期问题解决了,调用代码也期望由lambda引起的更改立即发生,现在他们不会。必须对新模式进行每次使用审核。
答案 1 :(得分:0)
使用编译器查找所有有问题的现有代码。
这是可能的,但非平凡使用libtooling / clang插件 - 但可能不是你期望的。
您可以编写一个编译器在编译完所有代码后运行的插件,该插件可以在编译代码时检查clang构建的AST。您可以遍历AST以查找lambdas并检查其捕获列表的类型。这很酷,但文档不是很好,这可能是一个耗时的过程。可能不值得一次性项目。