呼び出し可能オブジェクトのまとめ

1289 ワード

まず、callableの概念を理解する必要があります.callableの故名は呼び出すことができるオブジェクトです.c/c++には、次のいくつかのcallableオブジェクトがあります.
1.関数
void func()
{
}

関数名funcは呼び出し可能なオブジェクトであることは明らかです
2.関数ポインタ
func_t func;

上記のfuncポインタも呼び出し可能なオブジェクトです.
3.()オペレータのクラスを再ロード
struct Callable
{
 public: 
    void operator()();
};

Callalbe x;
x();

上記のタイプのCallableのオブジェクトxは呼び出し可能なオブジェクトである.
4.bind関数パッケージの関数オブジェクト
//                     
class range {
public:
    bool operator() (int lb, int ub, int val) {
        return (lb <=val && val <=ub);
    }
};

auto presult = find_if(vec.begin(), vec.end(), \
                       bind(range{}, 5, 10, placeholders::_1));   //placeholders::_1 here    val,   

ここでbindが生成した関数オブジェクトのプロトタイプはbool func(int val)である.bindは、関数オブジェクトをカプセル化するためにも使用できます.
5.lambda式
auto f=[](int a,int b){return a>b;};

「Lambda式」(lambda expression)は匿名関数であり、Lambda式は数学のλ演算の名前は、その中のlambda抽象(lambda abstraction)に直接対応し、匿名関数、すなわち関数名のない関数である.
Lambda式は閉包(数学の伝統的な意味との違いに注意)を表すことができる.
Lambdaのタイプは一意であるため、タイプ名で対応するオブジェクトを明示的に宣言することはできませんが、autoキーワードとタイプ導出を使用することができます.