Namespaces
Variants

std::identity

Von de.cppreference.net
 
 
Dienstprogrammbibliothek
Sprachunterstützung
Typunterstützung (grundlegende Typen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Variadische Funktionen
Coroutinen-Unterstützung (C++20)
Vertragsunterstützung (C++26)
Drei-Wege-Vergleich
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Allgemeine Dienstprogramme
Relationale Operatoren (veraltet in C++20)
Ganzzahl-Vergleichsfunktionen
(C++20)(C++20)(C++20)    
(C++20)
Swap und Typoperationen
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Allgemeine Vokabeltypen
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
Funktionsobjekte
Funktionsaufruf
(C++17)(C++23)
Identitäts-Funktionsobjekt
(C++20)
Transparente Operator-Wrapper
(C++14)
(C++14)
(C++14)
(C++14)  
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)

Alte Binder und Adaptoren
(bis C++17*)
(bis C++17*)
(bis C++17*)
(bis C++17*)
(bis C++17*)(bis C++17*)(bis C++17*)(bis C++17*)
(bis C++20*)
(bis C++20*)
(bis C++17*)(bis C++17*)
(bis C++17*)(bis C++17*)

(bis C++17*)
(bis C++17*)(bis C++17*)(bis C++17*)(bis C++17*)
(bis C++20*)
(bis C++20*)
 
Definiert im Header <functional>
struct identity;
(seit C++20)

std::identity ist ein Funktionsobjekttyp, dessen operator() sein Argument unverändert zurückgibt.

Mitgliedertypen

Typ Definition
is_transparent unspecified

Memberfunktionen

operator()
gibt das Argument unverändert zurück
(öffentliche Elementfunktion)

std::identity:: operator()

template < class T >
constexpr T && operator ( ) ( T && t ) const noexcept ;

Gibt std:: forward < T > ( t ) zurück.

Parameter

t - zurückzugebendes Argument

Rückgabewert

std:: forward < T > ( t ) .

Hinweise

std::identity dient als Standardprojektion in constrained algorithms . Seine direkte Verwendung ist normalerweise nicht erforderlich.

Beispiel

#include <algorithm>
#include <functional>
#include <iostream>
#include <ranges>
#include <string>
struct Pair
{
    int n;
    std::string s;
    friend std::ostream& operator<<(std::ostream& os, const Pair& p)
    {
        return os << '{' << p.n << ", " << p.s << '}';
    }
};
// Ein Bereichs-Drucker, der projizierte (modifizierte) Elemente eines Bereichs drucken kann.
template<std::ranges::input_range R,
         typename Projection = std::identity> //<- Beachten Sie die Standardprojektion
void print(std::string_view const rem, R&& range, Projection projection = {})
{
    std::cout << rem << '{';
    std::ranges::for_each(
        range,
        [O = 0](const auto& o) mutable { std::cout << (O++ ? ", " : "") << o; },
        projection
    );
    std::cout << "}\n";
}
int main()
{
    const auto v = {Pair{1, "one"}, {2, "two"}, {3, "three"}};
    print("Drucken mit std::identity als Projektion: ", v);
    print("Projiziere Pair::n: ", v, &Pair::n);
    print("Projiziere Pair::s: ", v, &Pair::s);
    print("Drucken mit benutzerdefinierter Closure als Projektion: ", v,
        [](Pair const& p) { return std::to_string(p.n) + ':' + p.s; });
}

Ausgabe:

Drucken mit std::identity als Projektion: {{1, one}, {2, two}, {3, three}}
Projiziere Pair::n: {1, 2, 3}
Projiziere Pair::s: {one, two, three}
Drucken mit benutzerdefinierter Closure als Projektion: {1:one, 2:two, 3:three}

Siehe auch

gibt den Typ-Parameter unverändert zurück
(Klassen-Template)