C++競プロ学習日記(仮)

( 学習記録であり解説Blogではないです )

std::function|C++|STL

std::function(C++11) の覚書

C++日本語リファレンスによると下記の通り↓

functionクラステンプレートは、パラメータの型リストArgTypes...、戻り値の型Rに合致する、あらゆる関数ポインタ、関数オブジェクト、メンバ関数ポインタ、メンバ変数ポインタを保持できるクラスである。*1

...難しいので理解出来る範囲でまとめると、
std::function< 戻り値の型(引数の型) > で宣言すると、関数オブジェクトを代入出来るっぽい。

#include <bits/stdc++.h>
using namespace std;
int sum( int n )
{
    return n + n;
}
int main()
{
    //関数 sum を変数 f に保存
    function<int(int)> f = sum;
    //保持している sum 関数を呼び出す
    cout << f( 10 ) << endl; //result 20
    
    //ラムダ関数を保存
    function<string(string)> s = [&]( string s ){ return s.substr( 2, 3 ); };
    cout << s( "wwcwwww" ) << endl; //result  cww
    
    return 0;
}

[Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ