lambda式の引数に(マニュアルではできるってゆってるにもかかわらず) managed-object
が渡せないっちゅー不具合があったのですが、Visual Studio 2010β2 で解決した模様。
これでC++/CLIでもlamdaが使えるようになったワケですが、
lambdaの重要な機能:キャプチャについては依然としてmanaged-object
をキャプチャできない。
そこで、だ。maneged-objectはダメでもnativeならOKなわけで、
そんじゃってんでgcrootで managedにnativeのカワをかぶせてみた。
// compile with: /clr #include <msclr/gcroot.h> using namespace System; int main() { msclr::gcroot<String^> capture = L" be captured"; String^ result = [&] (String^ arg) -> String^ { String^ tmp = arg + capture; capture = L"changed in lambda!"; return tmp; }("will"); Console::WriteLine(L"result[{0}] capture[{1}]", result, capture); }おー、でけたー。
C++/CLIでlambda
おおー!