是否有一种棘手的方法来阻止通过引用兰达捕获对象?例如,我想不允许这样做:
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).