std::is_placeholder
Материал из cppreference.com
<tbody>
</tbody>
| Определено в заголовочном файле <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 для обнаружения заполнителей для несвязанных аргументов.
Шаблон вспомогательной переменной
<tbody> </tbody> 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 (константа) |