オブジェクトがランバへの参照によってキャプチャされるのを防ぐトリッキーな方法はありますか? たとえば、これを禁止したいと思います。
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
}
A
このコンテキストでは簡単に悪用される可能性があるため、これを防ぎたいので、ユーザーが自分自身を傷つけないようにしたいと思います。どのクラスも誤用される可能性があると主張することができますが、A
の契約を考えると、ユーザーがこれを行うのは本当に魅力的です。必要なだけ A をラップ、変更、またはその他の方法で難読化する自由があります。
編集
ラムダが作成されると、非同期プロセスに渡され、現在のスレッドはその非同期プロセスが完了するまでインラインで待機します。 A
非同期操作がいつ完了するかを知るのに役立つクラスです ( と考えてboost::future
ください)。