C++0xのラムダ式でクロージャ
#include <iostream> #include <functional> #include <string> int main() { auto f = [](std::string &&str) -> std::function<void()> { std::string s_ = str; return [s_] () mutable -> void { std::cout << s_ << std::endl; s_ += std::string(" Hello"); }; }; auto g = f("Message : "); for(int i = 0; i < 10; ++i) { g(); } }
Message : Message : Hello Message : Hello Hello Message : Hello Hello Hello Message : Hello Hello Hello Hello Message : Hello Hello Hello Hello Hello Message : Hello Hello Hello Hello Hello Hello Message : Hello Hello Hello Hello Hello Hello Hello Message : Hello Hello Hello Hello Hello Hello Hello Hello Message : Hello Hello Hello Hello Hello Hello Hello Hello Hello
[追記]外側のラムダ式に不要なmutableが付いてた指摘を頂いたので修正[/追記]