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 > inlineconstexprint 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 (константа) |