【C++】クロージャ
Luaでクロージャを扱ったのでC++でも実装する
クロージャに関することはLuaの記事を参照
参照:【Lua】クロージャ - 備忘録
test.cpp
#include <iostream> #include <memory> #include <functional> int main(int argc, char *argv[]) { // 右辺の戻り値を型推論で省略すると // Visual C++ 2013 ではコンパイルエラーとなった auto Counter = []()->std::function<void()> { auto x = std::make_shared<int>(0); return [x](){ std::cout << (*x)++ << std::endl; }; }; auto func0 = Counter(); auto func1 = Counter(); func0(); // 0 func1(); // 0 func0(); // 1 func1(); // 1 func0(); // 2 func1(); // 2 getchar(); return 0; }