ハッピーメモメモ

私的備忘録

関数オブジェクト

 

アロー関数

・TypeScriptでアロー関数を勉強中にでてきたコード

const add = (a: number, b: number) => { return a + b; };
console.log(add(2, 5));
const printOutput: (output: string | number) => void = (output) => {
  console.log(output);
};
printOutput(add(2, 5));

・なんかすっきりしない…

 ①変数に関数を代入?

 ②変数名()で呼び出し?

 

関数オブジェクトとは

・関数をオブジェクトにしたもののこと

C++ では、関数オブジェクトのことをファンクタ (functor)と呼ぶこともある

・メリット

→関数は情報(データ)を持つことができる上に、変数に保存したり、他の関数の引数に渡したりできる

関数オブジェクト | Programming Place Plus C++編【言語解説】 第34章

 

・関数オブジェクトとは、括弧演算子メンバ関数として定義するクラスのインスタンスのこと

・関数オブジェクトを関数として使用するときは、この関数を呼び出すと必ず括弧演算子が呼び出される

3.3 Function Objects

 

・関数オブジェクトは、関数のように振る舞うことのできるオブジェクトのこと

・関数オブジェクトは多くの場合、クラスに対して関数呼び出し演算子を定義することで実現される

【C++】色々な関数オブジェクト【ラムダ ファンクタ 関数ポインタ】 | MaryCore

 

①変数に関数を代入?

C++ では、関数オブジェクトを変数に格納したり、引数として渡したり、テンプレートやクラスのメンバとして渡したりすることも可能

【C++】色々な関数オブジェクト【ラムダ ファンクタ 関数ポインタ】 | MaryCore

→関数オブジェクトは、変数に格納することを認められてるのか…

 

②変数名()で呼び出し?

C++ では、関数呼び出しに使う()演算子オーバーロードすることによって実現する

関数オブジェクト | Programming Place Plus C++編【言語解説】 第34章

→add()は、オーバーロードをしている!?