std::placeholders::_1, std::placeholders::_2, ..., std::placeholders::_N
提供: cppreference.com
<tbody>
</tbody>
| ヘッダ <functional> で定義
|
||
/*see below*/ _1; /*see below*/ _2; . . /*see below*/ _N; |
||
名前空間 std::placeholders はプレースホルダーオブジェクト [_1, . . . _N] を保持します。 ただし N は処理系定義の最大値です。
std::bind 式で引数として使用されると、そのプレースホルダーオブジェクトは生成された関数オブジェクトに格納され、その関数オブジェクトが未束縛引数を指定して呼ばれたとき、プレースホルダー _N はそれぞれ対応する N 番目の未束縛引数で置き換えられます。
|
各プレースホルダーは |
(C++17未満) |
|
プレースホルダーを |
(C++17以上) |
プレースホルダーオブジェクトの型は DefaultConstructible かつ CopyConstructible であり、そのデフォルトコピー/ムーブコンストラクタは例外を投げず、またすべてのプレースホルダー _N について std::integral_constant<int, N> から派生した型 std::is_placeholder<decltype(_N)> が定義されます。
例
以下のコードはプレースホルダー引数を持つ関数オブジェクトの作成を示します。
Run this code
#include <functional>
#include <string>
#include <iostream>
void goodbye(const std::string& s)
{
std::cout << "Goodbye " << s << '\n';
}
class Object {
public:
void hello(const std::string& s)
{
std::cout << "Hello " << s << '\n';
}
};
int main()
{
typedef std::function<void(const std::string&)> ExampleFunction;
Object instance;
std::string str("World");
ExampleFunction f = std::bind(&Object::hello, &instance,
std::placeholders::_1);
// equivalent to instance.hello(str)
f(str);
f = std::bind(&goodbye, std::placeholders::_1);
// equivalent to goodbye(str)
f(str);
return 0;
}
出力:
Hello World
Goodbye World
関連項目
(C++11) |
関数オブジェクトに1つ以上の引数をバインドします (関数テンプレート) |
(C++11) |
オブジェクトが標準のプレースホルダであるか、プレースホルダとして使用できることを表します (クラステンプレート) |
tuple を tie で分解するときに要素をスキップするためのプレースホルダです (定数) |