Namespaces
Variants

std::binary_function

ja.cppreference.net より
 
 
ユーティリティライブラリ
言語サポート
型サポート (基本型、RTTI)
ライブラリ機能テストマクロ (C++20)
プログラムユーティリティ
可変個引数関数
コルーチンサポート (C++20)
契約サポート (C++26)
三方比較
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

汎用ユーティリティ
関係演算子 (C++20で非推奨)
整数比較関数
(C++20)(C++20)(C++20)    
(C++20)
swap と 型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
共通ボキャブラリ型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
関数オブジェクト
関数呼び出し
(C++17)(C++23)
恒等関数オブジェクト
(C++20)
透過的な演算子ラッパー
(C++14)
(C++14)
(C++14)
(C++14)  
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)

旧式のバインダとアダプタ
(C++17まで*)
(C++17まで*)
(C++17まで*)
(C++17まで*)  
(C++17まで*)
(C++17まで*)(C++17まで*)(C++17まで*)(C++17まで*)
(C++20まで*)
(C++20まで*)
(C++17まで*)(C++17まで*)
(C++17まで*)(C++17まで*)

(C++17まで*)
(C++17まで*)(C++17まで*)(C++17まで*)(C++17まで*)
(C++20まで*)
(C++20まで*)
 
ヘッダ <functional>
template<
    class Arg1,
    class Arg2, 
    class Result
> struct binary_function;
で定義 (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 Result

例

#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++11で非推奨) (C++17で削除)
関数ポインタからアダプタ互換な関数オブジェクトラッパーを作成する
(関数テンプレート)
(C++11で非推奨) (C++17で削除)
二項関数へのポインタのアダプタ互換ラッパー
(クラステンプレート)
(C++11で非推奨) (C++17で削除)
アダプタ互換な単項関数の基底クラス
(クラステンプレート)