...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

C++/CLIでlambda

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

おおー!