GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
std::mem_fn(3) C++ Standard Libary std::mem_fn(3)

std::mem_fn - std::mem_fn


Defined in header <functional>
template< class M, class T > (since C++11)
/*unspecified*/ mem_fn(M T::* pm) noexcept; (until C++20)
template< class M, class T > (since C++20)
constexpr /*unspecified*/ mem_fn(M T::* pm) noexcept;


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:

std::mem_fn return type


type definition
the return type of pm if pm
result_type(deprecated in C++17) is a pointer to member
function, not defined for
pointer to member object
T*, possibly cv-qualified, (until C++20)
argument_type(deprecated in C++17) if pm is a pointer to member
function taking no arguments
T* if pm is a pointer to
first_argument_type(deprecated in C++17) member function taking one
argument
T1 if pm is a pointer to
second_argument_type(deprecated in C++17) member function taking one
argument of type T1


template<class... Args>


/* see below */ operator()(Args&&... args) /* cvref-qualifiers */ (until C++20)


noexcept(/* see below */);
template<class... Args>


constexpr /* see below */ operator()(Args&&... args) /* (since C++20)
cvref-qualifiers */


noexcept(/* see below */);


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
or equivalently std::invoke_result_t<decltype(pm), Args&&...>, and the value in
noexcept specifier is equal to std::is_nothrow_invocable_v<decltype(pm), Args&&...>)
(since C++17).


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:

// Run this code


#include <functional>
#include <iostream>
#include <memory>


struct Foo {
void display_greeting() {
std::cout << "Hello, world.\n";
}
void display_number(int i) {
std::cout << "number: " << i << '\n';
}
int add_xy(int x, int y) {
return data + x + y;
}
template <typename... Args> int add_many(Args... args) {
return data + (args + ...);
}
auto add_them(auto... args) {
return data + (args + ...);
}


int data = 7;
};


int main() {
auto f = Foo{};


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';


auto add_xy = std::mem_fn(&Foo::add_xy);
std::cout << "add_xy: " << add_xy(f, 1, 2) << '\n';


// Working with smart pointer
auto u = std::make_unique<Foo>();
std::cout << "access_data(u): " << access_data(u) << '\n';
std::cout << "add_xy(u, 1, 2): " << add_xy(u, 1, 2) << '\n';


// Working with member function template with parameter pack
auto add_many = std::mem_fn(&Foo::add_many<short, int, long>);
std::cout << "add_many(u, ...): " << add_many(u, 1, 2, 3) << '\n';
auto add_them = std::mem_fn(&Foo::add_them<short, int, float, double>);
std::cout << "add_them(u, ...): " << add_them(u, 5, 7, 10.0f, 13.0) << '\n';
}


Hello, world.
number: 42
data: 7
add_xy: 10
access_data(u): 7
add_xy(u, 1, 2): 10
add_many(u, ...): 13
add_them(u, ...): 42


Defect reports


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
LWG 2489 C++11 noexcept not required required


function wraps callable object of any copy constructible type with
(C++11) specified function call signature
(class template)
move_only_function wraps callable object of any type with specified function call
(C++23) signature
(class template)
bind binds one or more arguments to a function object
(C++11) (function template)

2022.07.31 http://cppreference.com

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.