Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::mem_fun(3)		      C++ Standard Libary	       std::mem_fun(3)

NAME
       std::mem_fun - std::mem_fun

Synopsis
	  Defined in header <functional>
	  template< class Res, class T >			     (1) (dep-
       recated in C++11)
	  std::mem_fun_t<Res,T>	 mem_fun( Res (T::*f)()	);		  (re-
       moved in	C++17)
	  template< class Res, class T >				 (dep-
       recated in C++11)
	  std::const_mem_fun_t<Res,T> mem_fun( Res (T::*f)() const   (1)  (re-
       moved in	C++17)
	  );
	  template< class Res, class T,	class Arg >		     (2) (dep-
       recated in C++11)
	  std::mem_fun1_t<Res,T,Arg>  mem_fun( Res (T::*f)(Arg)	);	  (re-
       moved in	C++17)
	  template< class Res, class T,	class Arg >			 (dep-
       recated in C++11)
	  std::const_mem_fun1_t<Res,T,Arg> mem_fun( Res	(T::*f)(Arg) (2)  (re-
       moved in	C++17)
	  const	);

	  Creates  a  member function wrapper object, deducing the target type
       from the	template
	  arguments. The wrapper object	expects	a pointer to an	object of type
       T as the	first
	  parameter to its operator().

	  1)	  Effectively	   calls      std::mem_fun_t<Res,T>(f)	    or
       std::const_mem_fun_t<Res,T>(f).
	  2) Effectively calls std::mem_fun1_t<Res,T,Arg>(f) or
	  std::const_mem_fun1_t<Res,T,Arg>(f).

	  This function	and the	related	types were deprecated in C++11 and re-
       moved in	C++17 in
	  favor	 of  the more general std::mem_fn and std::bind, both of which
       create callable
	  adaptor-compatible function objects from member functions.

Parameters
	  f - pointer to a member function to create a wrapper for

Return value
	  A function object wrapping f.

Exceptions
	  May throw implementation-defined exceptions.

Notes
	  The difference between std::mem_fun and std::mem_fun_ref is that the
       former produces
	  a function wrapper that expects a pointer to an object, whereas  the
       latter  a
	  reference.

Example
	  Demonstrates	std::mem_fun  usage  and compares it with std::mem_fn.
       C++11/14
	  compatible compilation mode might  be	 necessary:  g++/clang++  with
       -std=c++11, cl with
	  /std:c++11, etc. On recent compilers,	e.g. gcc-12, might issue "dep-
       recated
	  declaration" warnings	if not compiled	in C++98 mode.

       // Run this code

	#include <functional>
	#include <iostream>

	struct S
	{
	    int	get_data() const { return data;	}
	    void no_args() const { std::cout <<	"void S::no_args() const\n"; }
	    void one_arg(int) {	std::cout << "void S::one_arg()\n"; }
	    void  two_args(int,	 int)  {  std::cout  <<	"void S::two_args(int,
       int)\n";	}
	#if __cplusplus	> 201100
	    int	data{42};
	#else
	    int	data;
	    S()	: data(42) {}
	#endif
	};

	int main()
	{
	    S s;

	    std::const_mem_fun_t<int, S> p = std::mem_fun(&S::get_data);
	    std::cout << "s.get_data():	" << p(&s) << '\n';

	    std::const_mem_fun_t<void, S> p0 = std::mem_fun(&S::no_args);
	    p0(&s);

	    std::mem_fun1_t<void, S, int> p1 = std::mem_fun(&S::one_arg);
	    p1(&s, 1);

	#if __cplusplus	> 201100
	//  auto p2 = std::mem_fun(&S::two_args); // Error:  mem_fun  supports
       only member functions
						  //   without	parameters  or
       with only one parameter.
						  // Thus,  std::mem_fn	 is  a
       better alternative:
	    auto p2 = std::mem_fn(&S::two_args);
	    p2(s, 1, 2);

	//   auto pd = std::mem_fun(&S::data); // Error: pointers to data mem-
       bers are	not supported.
					      // Use std::mem_fn instead:
	    auto pd = std::mem_fn(&S::data);
	    std::cout << "s.data = " <<	pd(s) << '\n';
	#endif
	}

Possible output:
	s.get_data(): 42
	void S::no_args() const
	void S::one_arg(int)
	void S::two_args(int, int)
	s.data = 42

See also
	  mem_fn		creates	a function object out of a pointer  to
       a member
	  (C++11)		(function template)
	  mem_fun_ref		 creates  a  wrapper  from a pointer to	member
       function, callable
	  (deprecated in C++11)	with a reference to object
	  (removed in C++17)	(function template)

http://cppreference.com		  2024.06.10		       std::mem_fun(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::mem_fun&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help