はじめに
C++版LINKSでのゲームメニューがかなり冗長だった(メニュー項目分だけ異なる関数を呼び出す形になってたから)ので、短くできないかなーと思い色々調べてたのが事のきっかけ
で、色々調べてたらstd::arrayに関数オブジェクトとして格納できるらしい……?ということを知ったので試してみた。
実際のコードはこちら
やってること
std::fuctionを使ってラムダ式を関数オブジェクトとして受け取る。
std::function<void(void)> func1 = []{ std::cout << "func1" << std::endl; return 0;};
で、それをstd::arrayに代入してるだけ
std::array<std::function<void(void)>, 3> Func = {func1, func2, func3};
あとは、std::arrayなどで使えるrange-based-forを使って各ラムダ式を実行するだけ
for(auto func : Func)
func();
こんなかんじで、ラムダ式をstd::arrayに渡してrange-based-forで回して実行できる
あと、既存の関数とか実行する時はこんなかんじでいけるみたい
おわりに
これで、ゲームメニュー周りのコードなんかも短くできるんじゃないかと思う
はじめて触ってみたけど、std::function便利だなぁ