C ++ / CXでラムダを使用してイベントを処理することは可能ですか?例として、このコードスニペットをC#からC ++ / CXに変換する最良の方法は何でしょうか?
this.animation.Completed += (s, e) =>
{
animation.Begin();
};
C ++ / CXでラムダを使用してイベントを処理することは可能ですか?例として、このコードスニペットをC#からC ++ / CXに変換する最良の方法は何でしょうか?
this.animation.Completed += (s, e) =>
{
animation.Begin();
};
はい、それは正しい構文です。ただし、ラムダは循環参照を導入し、メモリが解放されないようにする可能性があるため、ラムダの代わりに関数ハンドラーを使用することをお勧めします。
http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh755799.aspx
一般に、循環参照を避けるように細心の注意を払わない限り、イベントハンドラーにはラムダではなく名前付き関数を使用することをお勧めします。名前付き関数は弱参照によって「this」ポインターをキャプチャしますが、ラムダは強参照によってそれをキャプチャし、循環参照を作成します。詳細については、弱参照とブレークサイクル(C ++ / CX)を参照してください。
これが私がやったことです。
animation->Completed += ref new EventHandler<Object^>([this](Object^, Object^)
{
animtion->Begin();
});