呼び出し可能オブジェクトのまとめ
1289 ワード
まず、
1.関数
関数名
2.関数ポインタ
上記のfuncポインタも呼び出し可能なオブジェクトです.
3.
上記のタイプの
4.bind関数パッケージの関数オブジェクト
ここでbindが生成した関数オブジェクトのプロトタイプは
5.lambda式
「Lambda式」(lambda expression)は匿名関数であり、Lambda式は数学のλ演算の名前は、その中のlambda抽象(lambda abstraction)に直接対応し、匿名関数、すなわち関数名のない関数である.
Lambda式は閉包(数学の伝統的な意味との違いに注意)を表すことができる.
Lambdaのタイプは一意であるため、タイプ名で対応するオブジェクトを明示的に宣言することはできませんが、autoキーワードとタイプ導出を使用することができます.
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キーワードとタイプ導出を使用することができます.