禁止通过引用捕获

Jar*_*edC 1 c++ lambda c++11

是否有一种棘手的方法来阻止通过引用兰达捕获对象?例如,我想不允许这样做:

class A {};

void Foo()
{
    A a;
    auto lamda = [&a](){};      // Disallow this
    // give lambda to async process
    // use A to help know when the lamda finally gets called
}
Run Code Online (Sandbox Code Playgroud)

我想防止这种情况,因为A在这种情况下很容易被误用,所以我想阻止用户自己伤害.有人可能会争辩说任何一个类都可能被滥用,但是根据A合同,用户真的很想做到这一点.我可以根据需要自由地包装,更改和以其他方式混淆A.


编辑

创建lambda之后,当前线程等待内联直到异步进程完成后,它将被切换到异步进程. A是一个帮助了解异步操作何时完成的类(想想boost::future).

Ker*_* SB 7

你不能这样做.任何类型的左值都T可以绑定到类型的变量T &.您无法阻止对象成为左值表达式的值(例如,id-expression).