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);
}
おー、でけたー。