アピリッツの知識共有サイト「ナレッジベース」で公開されている内容をアピスピでも紹介します。こちらはES部のクライアントエンジニア・足立雅史さんによる記事です。
クライアントのゲーム開発において、 2大フレームワークにUnityとUnreal Engineがありますが、
この2つのフレームワークで異なるところは実装言語です。
UnityはC#で、Unreal EngineはC++なのですが、 そのラムダ式の記法の違いについて説明します。
ラムダ式とは
ある手続き(処理)のかたまりをオブジェクトのように扱える「関数オブジェクト」があります。
以下のコードだとfunc_obj や f_lambda が関数オブジェクトです。func_objにはprint_numberという関数が代入されていますが、f_lambdaにはその場で記述された無名の手続きが代入されています。
この名前付けされずに定義された関数を「ラムダ式」と呼んでいます。
#include <iostream>
#include <functional>
void print_number(const int i) {
std::cout << i << std::endl;
}
int main() {
std::function<void(int)> func_obj = print_number;
// 実行したら3と表示される
func_obj(3);
std::function<void(int)> f_lambda = [](int i) {
std::cout << i < std::endl;
};
// 実行したら5と表示される
f_lambda(5);
return 0;
}
ラムダ式の記法を比較
最近までUnityでC#を使って開発してきたのでC++と違いを調べていました。
型表現として、C++ではstd::functionを用いますが、C#では System.ActionやSystem.Funcを用います。
比較しやすいように一覧表を書いてみました。
| C++ | C# | 関数表現 |
|---|---|---|
std::function<void()> | System.Action | void func() |
std::function<void(int)> | System.Action<int> | void func(int i) |
std::function<bool(void)> | System.Func<bool> | bool func() |
std::function<bool(int,double)> | System.Func<int,double,bool> | bool func(int, double) |
std::function<int(int)> a = [](int x) {return x + 1;}; | System.Func<int,int> a = x => x + 1; |

の可能性とは-1-218x150.png)

























の可能性とは-1-100x70.png)









