std::mem_fun_ref
来自cppreference.com
< 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
参阅
(C++11 中弃用)(C++17 中移除) |
从成员函数指针创建包装器,可以一个对象指针调用 (函数模板) |