Defined in header <functional> | ||
|---|---|---|
template< class M, class T > /*unspecified*/ mem_fn(M T::* pm); | (since C++11) (until C++17) | |
template< class M, class T > /*unspecified*/ mem_fn(M T::* pm) noexcept; | (since C++17) |
Function template std::mem_fn generates wrapper objects for pointers to members, which can store, copy, and invoke a pointer to member. Both references and pointers (including smart pointers) to an object can be used when invoking a std::mem_fn.
| pm | - | pointer to member that will be wrapped |
std::mem_fn returns a call wrapper of unspecified type that has the following members:
Member types
| (until C++20) |
template<class... Args> /* see below */ operator()(Args&&... args); |
Let fn be the call wrapper returned by a call to std::mem_fn with a pointer to member pm. Then the expression fn(t, a2, ..., aN) is equivalent to INVOKE(pm, t, a2, ..., aN), where INVOKE is the operation defined in Callable. (Thus, the return type of operator() is std::result_of<decltype(pm)(Args&&...)>::type.).
Each argument in args is perfectly forwarded, as if by std::forward<Args>(args)....
Use mem_fn to store and execute a member function and a member object:
#include <functional>
#include <iostream>
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';
}Output:
Hello, world. number: 42 data: 7
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 2048 | C++11 | unnecessary overloads provided | removed |
|
(C++11) | wraps callable object of any type with specified function call signature (class template) |
|
(C++11) | binds one or more arguments to a function object (function template) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
http://en.cppreference.com/w/cpp/utility/functional/mem_fn