C++/CLI では (C# のように) マネージド ラムダを作成できないため、マネージド変数をキャプチャできません。(ラムダではなく) 通常のメソッドを作成することはできますが、管理された変数をキャプチャすることはできません。
C++/CLI コードで採用する標準的な回避策はありますか? つまり、C++/CLI で使用して C# から次のことを実行できる標準パターンを探しています。
class A { }
class B
{
void Foo()
{
A a = new A();
Func<A> aFunc = () => a; // Captures a
}
}
私はできた
- キャプチャする変数ごとにメンバー変数を作成し、デリゲートでそのメンバー変数を使用します。これは、キャプチャされた異なる a で動作するメソッドの 2 つの呼び出しがある可能性があるため、一般的なケースでは機能しませんが、一般的なケースでは機能します。
- ctor でキャプチャを行うネストされたクラスを作成し、このネストされたクラスのメソッドをデリゲートとして使用します。これは一般的なケースで機能するはずですが、さまざまな変数をキャプチャするたびに、ネストされたクラスが必要になることを意味します。
質問:上記のオプションよりも優れたオプションはありますか? または、上記のどのオプションが主なアプローチになりますか?
関連する質問: