Namespaces
Variants

std:: is_placeholder

From cppreference.net
Utilities library
Function objects
Function invocation
(C++17) (C++23)
Identity function object
(C++20)
Old binders and adaptors
( until C++17* )
( until C++17* )
( until C++17* )
( until C++17* )
( until C++17* ) ( until C++17* ) ( until C++17* ) ( until C++17* )
( until C++20* )
( until C++20* )
( until C++17* ) ( until C++17* )
( until C++17* ) ( until C++17* )

( until C++17* )
( until C++17* ) ( until C++17* ) ( until C++17* ) ( until C++17* )
( until C++20* )
( until C++20* )
Definido en el encabezado <functional>
template < class T >
struct is_placeholder ;
(desde C++11)

Si T es el tipo de un marcador de posición estándar (_1, _2, _3, ...) , entonces esta plantilla se deriva de std:: integral_constant < int , 1 > , std:: integral_constant < int , 2 > , std:: integral_constant < int , 3 > , respectivamente.

Si T no es un tipo de marcador de posición estándar, esta plantilla deriva de std:: integral_constant < int , 0 > .

Un programa puede especializar esta plantilla para un tipo definido por el programa T para implementar UnaryTypeTrait con característica base de std:: integral_constant < int , N > con un N positivo para indicar que T debe tratarse como el N º tipo de marcador de posición.

std::bind utiliza std::is_placeholder para detectar marcadores de posición para argumentos no vinculados.

Contenidos

Plantilla de variable auxiliar

template < class T >
constexpr int is_placeholder_v = is_placeholder < T > :: value ;
(desde C++17)

Heredado de std:: integral_constant

Constantes miembro

value
[static]
valor de marcador de posición o 0 para tipos que no son marcadores de posición
(constante miembro pública estática)

Funciones miembro

operator int
convierte el objeto a int , devuelve value
(función miembro pública)
operator()
(C++14)
devuelve value
(función miembro pública)

Tipos miembro

Tipo Definición
value_type int
type std:: integral_constant < int , value >

Ejemplo

#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 << "El placeholder estándar _5 es para el número de argumento "
              << std::is_placeholder_v<decltype(std::placeholders::_5)>
              << '\n';
    auto b = std::bind(f, my_2, 2);
    std::cout << "Sumar 2 a 11 seleccionado con un placeholder personalizado da " 
              << b(10, 11) // el primer argumento, es decir 10, se ignora
              << '\n';
}

Salida:

El placeholder estándar _5 es para el número de argumento 5
Sumar 2 a 11 seleccionado con un placeholder personalizado da 13

Véase también

(C++11)
vincula uno o más argumentos a un objeto función
(plantilla de función)
marcadores de posición para los argumentos no vinculados en una expresión std::bind
(constante)