std::is_placeholder
Материал из cppreference.com
< cpp | utility | functional
Определено в заголовочном файле <functional>
|
||
template< class T > struct is_placeholder; |
(начиная с C++11) | |
Если T
является типом стандартного заполнителя (_1, _2, _3, ...)
, то этот шаблон является производным от std::integral_constant<int,1>, std::integral_constant<int,2>, std::integral_constant<int,3> соответственно.
Если T
не является стандартным типом заполнителя, этот шаблон является производным от std::integral_constant<int,0>
Шаблон может быть специализирован для любого определяемого пользователем типа T
: специализация должна соответствовать UnaryTypeTrait с базовой характеристикой std::integral_constant<int, N> с N > 0, чтобы указать, что T
следует рассматривать как N
й тип заполнителя.
std::bind использует std::is_placeholder
для обнаружения заполнителей для несвязанных аргументов.
Содержание |
[править] Шаблон вспомогательной переменной
template< class T > inline constexpr int is_placeholder_v = is_placeholder<T>::value; |
(начиная с C++17) | |
Унаследован от std::integral_constant
Константы элементы
value [static] |
значение заполнителя или 0 для типов, не являющихся заполнителями (public static константа-элемент) |
Функции-элементы
operator int |
преобразует объект в int, возвращает value (public функция-элемент) |
operator() (C++14) |
возвращает value (public функция-элемент) |
Типы элементы
Тип | Определение |
value_type
|
int |
type
|
std::integral_constant<int, value> |
[править] Пример
Запустить этот код
#include <functional> #include <iostream> #include <type_traits> struct My_2 { } my_2; namespace std { template<> struct is_placeholder<My_2> : public integral_constant<int, 2> {}; } int f(int n1, int n2) { return n1+n2; } int main() { std::cout << "Стандартный заполнитель _5 для номера аргумента " std::is_placeholder_v<decltype(std::placeholders::_5)> << '\n'; auto b = std::bind(f, my_2, 2); std::cout << "Добавление 2 к 11, выбранным с помощью пользовательского заполнителя," " даёт " << b(10, 11) // первый аргумент, а именно 10, игнорируется << '\n'; }
Вывод:
Стандартный заполнитель _5 для номера аргумента 5 Добавление 2 к 11, выбранным с помощью пользовательского заполнителя, даёт 13
[править] Смотрите также
(C++11) |
связывает один или несколько аргументов с объектом функцией (шаблон функции) |
(C++11) |
заполнители для несвязанных аргументов в выражении std::bind (константа) |