头文件:
#include <functional>
template< class M, class T >
/*unspecified*/ mem_fn(M T::* pm) noexcept; (C++11 起)
/*unspecified*/ mem_fn(M T::* pm) noexcept; (C++20 前)
template< class M, class T >
constexpr /*unspecified*/ mem_fn(M T::* pm) noexcept; (C++20 起)
作用:
- 函数模板std::mem_fn生成指向成员指针的包装对象,它可以存储、复制以及调用指向成员指针。到对象的引用和指针(含智能指针)可在调用 std::mem_fn 时使用。
- 常用于:从成员指针创建出函数对象
参数:
- pm - 指向被包装成员的指针
返回值:
- std::mem_fn 返回未指定类型的调用包装
示例
存储成员函数和成员对象
#include <iostream>
#include <functional>
using namespace std;
struct Foo {
void display_greeting() {
std::cout << "Hello, world.\n";
}
void display_number(int i) {
std::cout << "number: " << i << '\n';
}
int data = 7;
};
int main() {
Foo f;
auto greet = std::mem_fn(&Foo::display_greeting);
greet(&f);
auto print_num = std::mem_fn(&Foo::display_number);
print_num(&f, 42);
auto access_data = std::mem_fn(&Foo::data);
std::cout << "data: " << access_data(&f) << '\n';
return 0;
}