std::identity
Определён в заголовочном файле <functional> | ||
|---|---|---|
struct identity; | (начиная с C++20) |
std::identity — это тип функционального объекта, у которого operator() возвращает свой аргумент без изменений.
Типы-члены
| Тип | Определение |
|---|---|
is_transparent | не определён |
Функции-члены
| возвращает аргумент без изменений (открытая функция-член) |
std::identity::operator()
template< class T > constexpr T&& operator()( T&& t ) const noexcept; |
Возвращает std::forward<T>(t).
Параметры
| t | - | аргумент, который нужно вернуть |
Возвращаемое значение
std::forward<T>(t).
Примечания
std::identity используется в качестве проекции по умолчанию в алгоритмах с ограничениями. Обычно напрямую использовать его не требуется.
Пример
#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 << '}';
}
};
// A range-printer that can print projected (modified) elements of a range.
template<std::ranges::input_range R,
typename Projection = std::identity> //<- Notice the default projection
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("Print using std::identity as a projection: ", v);
print("Project the Pair::n: ", v, &Pair::n);
print("Project the Pair::s: ", v, &Pair::s);
print("Print using custom closure as a projection: ", v,
[](Pair const& p) { return std::to_string(p.n) + ':' + p.s; });
}
Вывод:
Print using std::identity as a projection: {{1, one}, {2, two}, {3, three}}
Project the Pair::n: {1, 2, 3}
Project the Pair::s: {one, two, three}
Print using custom closure as a projection: {1:one, 2:two, 3:three}
См. также
|
(C++20) | возвращает аргумент типа без изменений (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/functional/identity