9

C ++ / CXでラムダを使用してイベントを処理することは可能ですか?例として、このコードスニペットをC#からC ++ / CXに変換する最良の方法は何でしょうか?

this.animation.Completed += (s, e) =>
{
   animation.Begin();
};
4

2 に答える 2

6

はい、それは正しい構文です。ただし、ラムダは循環参照を導入し、メモリが解放されないようにする可能性があるため、ラムダの代わりに関数ハンドラーを使用することをお勧めします。

http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh755799.aspx

一般に、循環参照を避けるように細心の注意を払わない限り、イベントハンドラーにはラムダではなく名前付き関数を使用することをお勧めします。名前付き関数は弱参照によって「this」ポインターをキャプチャしますが、ラムダは強参照によってそれをキャプチャし、循環参照を作成します。詳細については、弱参照とブレークサイクル(C ++ / CX)を参照してください。

于 2012-10-09T20:22:29.427 に答える
5

これが私がやったことです。

animation->Completed += ref new EventHandler<Object^>([this](Object^, Object^)
{
   animtion->Begin();
});
于 2012-09-18T14:52:48.493 に答える