std::mem_fn
De cppreference.com
|
|
This page has been machine-translated from the English version of the wiki using Google Translate.
The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
<metanoindex/>
<tbody> </tbody>| Definido no cabeçalho <functional>
|
||
template< class R, class T > /*unspecified*/ mem_fn(R T::* pm); |
(1) | (desde 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, mas defeito) |
std::mem_fn modelo função gera objetos wrapper para ponteiros para os membros, que pode armazenar, copiar, e chamar um ponteiro para membro. Ambas as referências e ponteiros (incluindo ponteiros inteligentes) para um objeto pode ser usado quando invocando um std::mem_fn.Original:
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.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
As sobrecargas (2), são relatados como defeito.
Original:
The overloads (2) are reported as defect.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
O resolution, que foi recentemente eleito o "Timidamente Ready" propõe a eliminação de todas as sobrecargas (2).
Original:
The resolution, which has recently been voted "Tentatively Ready" proposes to remove all the overloads (2).
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Isso vai quebrar um código, consulte Exemplo 3.
Original:
This will break some code, see Example 3.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Parâmetros
| pm | - | ponteiro para membro que será envolvido
Original: pointer to member that will be wrapped The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
Valor de retorno
std::mem_fn retorna um invólucro chamada de tipo não especificado, que tem os seguintes membros:Original:
std::mem_fn returns an call wrapper of unspecified type that has the following members:The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
std :: mem_fnOriginal:std::mem_fnThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. Return type
Original:
std::mem_fn
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Member types
tipo
Original: type The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
definition |
result_type
|
o tipo de retorno
pm se pm é um ponteiro para função de membro, não definido para ponteiro para objeto membro Original: the return type of pm if pm is a pointer to member function, not defined for pointer to member object The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
argument_type
|
T*, possivelmente cv qualificado, se pm é um ponteiro para função de membro não recebendo nenhum argumentoOriginal: T*, possibly cv-qualified, if pm is a pointer to member function taking no argumentsThe text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
first_argument_type
|
T* se pm é um ponteiro para função de membro recebendo um argumentoOriginal: T* if pm is a pointer to member function taking one argumentThe text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
second_argument_type
|
T1 se pm é um ponteiro para função de membro recebendo um argumento do tipo T1 Original: T1 if pm is a pointer to member function taking one argument of type T1 The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
Member function
operator() |
invoca o alvo em um objeto determinado, com parâmetros opcionais Original: invokes the target on a specified object, with optional parameters The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (função pública membro) |
Exceções
Nenhum.
Original:
None.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Exemplo 1
Use
mem_fn para armazenar e executar uma função de membro e um objeto membro:
Original:
Use
mem_fn to store and execute a member function and a member object:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
#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';
}
Saída:
Hello, world.
number: 42
data: 7
Exemplo 2
Passe uma função de membro para std::transform para criar uma seqüência de números:
Original:
Pass a member function to std::transform to create a sequence of numbers:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
#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';
}
Saída:
The string lengths are 4 2 1 4 7 4
Exemplo 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
}
Veja também
(C++11) |
envolve objeto que pode ser chamado de qualquer tipo com a assinatura especificada função chamada Original: wraps callable object of any type with specified function call signature The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (modelo de classe) |
(C++11) |
se liga um ou mais argumentos para um objeto de função Original: binds one or more arguments to a function object The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (modelo de função) |