# std::binary_function

< cpp‎ | utility‎ | functional

定义于头文件 `<functional>` |  |
template< class Arg1, class Arg2, class Result > struct binary_function; |  | (C++11 中弃用) (C++17 中移除)

`binary_function` 是用于创建拥有二个参数的函数对象的基类。

`binary_function` 不定义 operator() ；它期待导出类将定义此运算符。 `binary_function` 只提供三个类型—— `first_argument_type` 、 `second_argument_type` 和 `result_type` ——为模板形参所定义。

一些标准库函数适配器，如 std::not2 要求其适配的函数对象必须定义这些类型； std::not2 要求要适配的函数对象必须拥有二个名为 `first_argument_type` 和 `second_argument_type` 的类型。从 `binary_function` 导出接受二个参数的函数对象是令它们与那些适配器兼容的简便方式。

`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<int> v1{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        std::vector<int> v2{10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
        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';
    }

输出：

    0 10 true
    1 9 true
    2 8 true
    3 7 true
    4 6 true
    5 5 false
    6 4 true
    7 3 true
    8 2 true
    9 1 true
    10 0 true

### 参阅

function (C++11) | 包装具有指定函数调用签名的任意可复制构造类型的可调用对象 (类模板)
ptr_fun (C++11 中弃用)(C++17 中移除) | 从函数指针创建与适配器兼容的函数对象包装器 (函数模板)
pointer_to_binary_function (C++11 中弃用)(C++17 中移除) | 适配器兼容的包装，用于包装二元函数的指针 (类模板)
unary_function (C++11 中弃用)(C++17 中移除) | 与适配器兼容的一元函数基类 (类模板)