std::binary_function
From cppreference.com
< cpp | utility | functional
| ヘッダ <functional> で定義 |
||
| template< class Arg1, |
(C++11で非推奨) (C++17で削除) |
|
std::binary_function は、2つの引数を持つ関数オブジェクトを作成するための基底クラスです。
std::binary_function は operator() を定義していません。派生クラスがこれを定義することが期待されます。std::binary_function は、テンプレートパラメータによって定義される first_argument_type、second_argument_type、result_type の3つの型のみを提供します。
std::not2 のような一部の標準ライブラリ関数オブジェクトアダプタは、それが適応する関数オブジェクトに特定の型が定義されていることを要求します。std::not2 は、適応される関数オブジェクトに first_argument_type と second_argument_type という名前の2つの型があることを要求します。2つの引数を受け取る関数オブジェクトを std::binary_function から派生させることは、それらをそのようなアダプタと互換性のあるものにする簡単な方法です。
std::binary_function は C++11 で非推奨となり、C++17 で削除されました。
[編集] メンバ型
| 型 | 定義 |
first_argument_type
|
Arg1
|
second_argument_type
|
Arg2
|
result_type
|
結果
|
[編集] 例
このコードを実行
#include <algorithm> #include <functional> #include <iostream> #include <vector> struct same : std::binary_function<int, int, bool> { bool operator()(int a, int b) const { return a == b; } }; int main() { std::vector<char> v1{'A', 'B', 'C', 'D', 'E'}; std::vector<char> v2{'E', 'D', 'C', 'B', 'A'}; std::vector<bool> v3(v1.size()); std::transform(v1.begin(), v1.end(), v2.begin(), v3.begin(), std::not2(same())); std::cout << std::boolalpha; for (std::size_t i = 0; i < v1.size(); ++i) std::cout << v1[i] << " != " << v2[i] << " : " << v3[i] << '\n'; }
出力
A != E : true B != D : true C != C : false D != B : true E != A : true
[編集] 関連項目
| (C++11) |
コピー構築可能な任意の呼び出し可能オブジェクトをラップするコピー可能なラッパー (クラステンプレート) |
| (C++23) |
与えられた呼び出しシグネチャで修飾子をサポートする任意の呼び出し可能オブジェクトのムーブ専用ラッパー (クラステンプレート) |
| (C++11で非推奨)(C++17で削除) |
関数へのポインタからアダプタ互換の関数オブジェクトラッパーを生成する (関数テンプレート) |
| (C++11で非推奨)(C++17で削除) |
二項関数へのポインタ用のアダプタ互換ラッパー (クラステンプレート) |
| (C++11で非推奨)(C++17で削除) |
アダプタ互換の単項関数基底クラス (クラステンプレート) |