C++のstd::functionを触ってみた

はじめに

C++版LINKSでのゲームメニューがかなり冗長だった(メニュー項目分だけ異なる関数を呼び出す形になってたから)ので、短くできないかなーと思い色々調べてたのが事のきっかけ

 

で、色々調べてたらstd::arrayに関数オブジェクトとして格納できるらしい……?ということを知ったので試してみた。

 

実際のコードはこちら

wandbox.org

 

やってること

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で回して実行できる

 

あと、既存の関数とか実行する時はこんなかんじでいけるみたい

wandbox.org

 

おわりに

これで、ゲームメニュー周りのコードなんかも短くできるんじゃないかと思う

はじめて触ってみたけど、std::function便利だなぁ