std::is_placeholder
Определено в заголовочном файле <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
[статическое] | значение плейсхолдера или 0 для типов, не являющихся плейсхолдерами (публичная статическая константа-член) |
Члены-функции
| operator int | преобразует объект в int, возвращает value (публичная функция-член) |
| operator()
(C++14) | возвращает value (публичная функция-член) |
Типы-члены
| Тип | Определение |
|---|---|
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 << "Standard placeholder _5 is for the argument number "
<< std::is_placeholder_v<decltype(std::placeholders::_5)>
<< '\n';
auto b = std::bind(f, my_2, 2);
std::cout << "Adding 2 to 11 selected with a custom placeholder gives "
<< b(10, 11) // the first argument, namely 10, is ignored
<< '\n';
}Вывод:
Standard placeholder _5 is for the argument number 5 Adding 2 to 11 selected with a custom placeholder gives 13
См. также
|
(C++11) | связывает один или несколько аргументов с объектом функции (шаблон функции) |
|
(C++11) | плейсхолдеры для несвязанных аргументов в выражении std::bind (константа) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/functional/is_placeholder