C++ named requirements: FunctionObject
From cppreference.net
C++
C++ named requirements
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A FunctionObject 型は、関数呼び出し演算子の左側で使用できるオブジェクトの型です。
目次 |
要件
型
T
は、以下の条件を満たす場合
FunctionObject
を満たします
-
型
Tは std::is_object を満たし、かつ
与えられた
-
f, 型Tまたはconst Tの値, -
args, 空でもよい適切な引数リスト.
以下の式は有効でなければなりません:
| 式 | 要件 |
|---|---|
| f ( args ) | 関数呼び出しを実行する |
注記
関数および関数への参照は関数オブジェクト型ではありませんが、関数からポインタへの implicit conversion により、関数オブジェクト型が期待される箇所で使用できます。
標準ライブラリ
- すべての 関数ポインタ はこの要件を満たします。
- <functional> で定義されているすべての関数オブジェクト。
- <functional> の関数の戻り値の型の一部。
例
様々な種類の関数オブジェクトを実演します。
このコードを実行
#include <functional> #include <iostream> void foo(int x) { std::cout << "foo(" << x << ")\n"; } void bar(int x) { std::cout << "bar(" << x << ")\n"; } int main() { void(*fp)(int) = foo; fp(1); // calls foo using the pointer to function std::invoke(fp, 2); // all FunctionObject types are Callable auto fn = std::function(foo); // see also the rest of <functional> fn(3); fn.operator()(3); // the same effect as fn(3) struct S { void operator()(int x) const { std::cout << "S::operator(" << x << ")\n"; } } s; s(4); // calls s.operator() s.operator()(4); // the same as s(4) auto lam = [](int x) { std::cout << "lambda(" << x << ")\n"; }; lam(5); // calls the lambda lam.operator()(5); // the same as lam(5) struct T { using FP = void (*)(int); operator FP() const { return bar; } } t; t(6); // t is converted to a function pointer static_cast<void (*)(int)>(t)(6); // the same as t(6) t.operator T::FP()(6); // the same as t(6) }
出力:
foo(1) foo(2) foo(3) foo(3) S::operator(4) S::operator(4) lambda(5) lambda(5) bar(6) bar(6) bar(6)
関連項目
|
呼び出し操作が定義されている型
(名前付き要件) |