# std::mem_fun_ref

< cpp‎ | utility‎ | functional

定义于头文件 `<functional>` |  |
template< class Res, class T > std::mem_fun_ref_t<Res,T> mem_fun_ref( Res (T::*f)() ); | (1) | (C++11 中弃用) (C++17 中移除)
template< class Res, class T > std::const_mem_fun_ref_t<Res,T> mem_fun_ref( Res (T::*f)() const ); | (1) | (C++11 中弃用) (C++17 中移除)
template< class Res, class T, class Arg > std::mem_fun1_ref_t<Res,T,Arg> mem_fun_ref( Res (T::*f)(Arg) ); | (2) | (C++11 中弃用) (C++17 中移除)
template< class Res, class T, class Arg > std::const_mem_fun1_ref_t<Res,T,Arg> mem_fun_ref( Res (T::*f)(Arg) const ); | (2) | (C++11 中弃用) (C++17 中移除)

创建成员函数包装对象，从模板实参推导类型。包装对象期待到 `T` 类型的引用作为其 operator() 的首个参数。

1) 等效地调用 std::mem_fun_ref_t<S,T>(f) 或 std::const_mem_fun_ref_t<S,T>(f) 。
2) 等效地调用 std::mem_fun1_ref_t<S,T>(f) 或 std::const_mem_fun1_ref_t<S,T>(f) 。

此函数与相关类型于 C++11 弃用并于 C++17 移除，为了让位给更通用的 std::mem_fn 与 std::bind ，它们都从成员函数创建可调用类型的兼容适配器的函数对象。

### 参数

f | - | 指向要创建包装的成员函数的指针

### 返回值

包装 `f` 的函数对象。

### 异常

可能抛出实现定义的异常。

### 注解

std::mem_fun 与 std::mem_fun_ref 的区别是前者产生的函数包装期待指向对象指针，而后者——期待引用。

### 示例

用 `std::mem_fun_ref` 绑定 std::string 的成员函数 size() 。

    #include <functional>
    #include <vector>
    #include <string>
    #include <iterator>
    #include <algorithm>
    #include <iostream>

    int main()
    {
        std::vector<std::string> v = {"once", "upon", "a", "time"};
        std::transform(v.begin(), v.end(),
                       std::ostream_iterator<std::size_t>(std::cout, " "),
                       std::mem_fun_ref(&std::string::size));
    }

输出：

    4 4 1 4

### 参阅

mem_fun (C++11 中弃用)(C++17 中移除) | 从成员函数指针创建包装器，可以一个对象指针调用 (函数模板)