Пространства имён
Варианты
Действия

std::mem_fn

Материал из cppreference.com
< cpp‎ | utility‎ | functional

 
 
 
Функция объектов
Функция обертки
Оригинал:
Function wrappers
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
function(C++11)
mem_fn(C++11)
bad_function_call(C++11)
Привязка
Оригинал:
Bind
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
bind(C++11)
is_bind_expression(C++11)
is_placeholder(C++11)
_1, _2, _3, ...(C++11)
Ссылка обертки
Оригинал:
Reference wrappers
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
reference_wrapper(C++11)
ref
cref
(C++11)
(C++11)
Оператор обертки
Оригинал:
Operator wrappers
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Negators
Оригинал:
Negators
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Устаревшие связующих и адаптеры
Оригинал:
Deprecated binders and adaptors
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
unary_function(устарело)
binary_function(устарело)
ptr_fun(устарело)
pointer_to_unary_function(устарело)
pointer_to_binary_function(устарело)
mem_fun(устарело)
mem_fun_t
mem_fun1_t
const_mem_fun_t
const_mem_fun1_t
(устарело)
(устарело)
(устарело)
(устарело)
mem_fun_ref(устарело)
mem_fun_ref_t
mem_fun1_ref_t
const_mem_fun_ref_t
const_mem_fun1_ref_t
(устарело)
(устарело)
(устарело)
(устарело)
binder1st
binder2nd
(устарело)
(устарело)
bind1st
bind2nd
(устарело)
(устарело)
 
Определено в заголовочном файле <functional>
template< class R, class T >
/*unspecified*/ mem_fn(R T::* pm);
(1) (начиная с C++11)
template< class R, class T, class... Args >

/*unspecified*/ mem_fn(R (T::* pm)(Args...));
template< class R, class T, class... Args >
/*unspecified*/ mem_fn(R (T::* pm)(Args...) const);
template< class R, class T, class... Args >
/*unspecified*/ mem_fn(R (T::* pm)(Args...) volatile);
template< class R, class T, class... Args >
/*unspecified*/ mem_fn(R (T::* pm)(Args...) const volatile);
template< class R, class T, class... Args >
/*unspecified*/ mem_fn(R (T::* pm)(Args...) &);
template< class R, class T, class... Args >
/*unspecified*/ mem_fn(R (T::* pm)(Args...) const &);
template< class R, class T, class... Args >
/*unspecified*/ mem_fn(R (T::* pm)(Args...) volatile &);
template< class R, class T, class... Args >
/*unspecified*/ mem_fn(R (T::* pm)(Args...) const volatile &);
template< class R, class T, class... Args >
/*unspecified*/ mem_fn(R (T::* pm)(Args...) &&);
template< class R, class T, class... Args >
/*unspecified*/ mem_fn(R (T::* pm)(Args...) const &&);
template< class R, class T, class... Args >
/*unspecified*/ mem_fn(R (T::* pm)(Args...) volatile &&);
template< class R, class T, class... Args >

/*unspecified*/ mem_fn(R (T::* pm)(Args...) const volatile &&);
(2) (C + +11, но дефект)
std::mem_fn функции шаблонов генерирует обертку объектов для указателей на члены, которые могут хранить, копировать, и ссылаться на указатель на член. Обе ссылки и указатели (в том числе смарт-указатели), чтобы объект может быть использован при вызове std::mem_fn.
Оригинал:
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.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Перегрузок (2) представлены как дефект.
Оригинал:
The overloads (2) are reported as defect.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
resolution, который недавно был признан "Ориентировочно Ready" предлагает удалить все перегрузок (2).
Оригинал:
The resolution, which has recently been voted "Tentatively Ready" proposes to remove all the overloads (2).
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Это нарушит код, см. пример 3.
Оригинал:
This will break some code, see Example 3.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

Содержание

[править] Параметры

pm -
указатель на член, который будет обернут
Оригинал:
pointer to member that will be wrapped
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

[править] Возвращаемое значение

std::mem_fn возвращает вызова оболочки неопределенного типа, который имеет следующие элементы:
Оригинал:
std::mem_fn returns an call wrapper of unspecified type that has the following members:
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

зЬй :: mem_fn
Оригинал:
std::mem_fn
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Return type

Member types

типа
Оригинал:
type
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
definition
result_type
возвращаемого типа pm если pm является указателем на функцию-член, не определено для указателя на член объекта
Оригинал:
the return type of pm if pm is a pointer to member function, not defined for pointer to member object
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
argument_type
T*, возможно, резюме квалифицированных, если pm является указателем на функцию-член не принимает аргументов
Оригинал:
T*, possibly cv-qualified, if pm is a pointer to member function taking no arguments
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
first_argument_type
T* если pm является указателем на функцию-член принимает один аргумент
Оригинал:
T* if pm is a pointer to member function taking one argument
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
second_argument_type
T1 если pm является указателем на функцию-член принимает один аргумент типа T1
Оригинал:
T1 if pm is a pointer to member function taking one argument of type T1
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

Member function

operator()
вызывает мишени на указанный объект, с дополнительными параметрами
Оригинал:
invokes the target on a specified object, with optional parameters
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

(public функция-член)

[править] Исключения

Ни.
Оригинал:
None.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

[править] Пример 1

Используйте mem_fn хранить и выполнять функции члена и члена объекта
Оригинал:
Use mem_fn to store and execute a member function and a member object:
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

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

Вывод:

Hello, world.
number: 42
data: 7

[править] Пример 2

Передать функцию, чтобы std::transform создать комбинацию цифр:
Оригинал:
Pass a member function to std::transform to create a sequence of numbers:
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

#include <iostream>
#include <functional>
#include <iterator>
#include <memory>
#include <string>
#include <vector>
#include <algorithm>
 
int main()
{
    std::vector<std::string> words = {"This", "is", "a", "test"};
    std::vector<std::unique_ptr<std::string>> words2;
    words2.emplace_back(new std::string("another"));
    words2.emplace_back(new std::string("test"));
 
    std::vector<std::size_t> lengths;
    std::transform(words.begin(),
                   words.end(),
                   std::back_inserter(lengths),
                   std::mem_fn(&std::string::size)); // uses references to strings
    std::transform(words2.begin(),
                   words2.end(),
                   std::back_inserter(lengths),
                   std::mem_fn(&std::string::size)); // uses unique_ptr to strings
 
    std::cout << "The string lengths are ";
    for(auto n : lengths) std::cout << n << ' ';
    std::cout << '\n';
}

Вывод:

The string lengths are 4 2 1 4 7 4

[править] Пример 3

#include <functional>
 
struct X {
  int x;
 
        int& easy()      {return x;}
        int& get()       {return x;}
  const int& get() const {return x;}
};
 
 
int main(void)
{
    auto a = std::mem_fn        (&X::easy); // no problem at all
//  auto b = std::mem_fn<int&  >(&X::get ); // no longer works with new specification
    auto c = std::mem_fn<int&()>(&X::get ); // works with both old and new specification
    auto d = [] (X& x) {return x.get();};   // another approach to overload resolution
}


[править] См. также

(C++11)
обертывания вызываемый объект любого типа с заданной подписью вызова функции
Оригинал:
wraps callable object of any type with specified function call signature
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

(шаблон класса) [edit]
(C++11)
связывает одну или несколько аргументов функции объекта
Оригинал:
binds one or more arguments to a function object
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

(шаблон функции) [edit]