class Add
{
Add(){cout<<"ctor";}
void operator()(int a ,int b){return a+b;}
}
int main()
{
Add(3,4);
}
Add は functor です。そして functor はコールバック メカニズムに役立ちますよね? では、ここはどこで起こっているのでしょうか??
そして、ファンクターはコールバックメカニズムに役立ちますよね?
はい。ファンクターを使用してユーザー定義の操作を実行する関数テンプレートを記述できます。例えば:
template <typename Fn>
void do_stuff(Fn f, int a, int b) {
int c = f(a, b);
do_something(c);
}
そして、次のように操作を挿入します。
do_stuff(Add(), 3, 4);
具体的な用途の 1 つはstd::sort
アルゴリズムです。このアルゴリズムでは、ユーザーが指定したファンクターを使用して、通常の比較演算子をサポートしていない型を比較できます。
では、ここはどこで起こっているのでしょうか??
そうではありません。あなたのコードはコンパイルされません。戻り値を修正した後 ( ではない値を返すためvoid
)、次の関数を作成して呼び出すことができます。
Add()(3,4);
しかし、それは特に役に立ちません。