Espacios de nombres
Variantes
Acciones

std::piecewise_construct_t

De cppreference.com
< cpp‎ | utility
 
 
Biblioteca de servicios
 
std::pair
Funciones miembro
Funciones no miembro
(hasta C++20)(hasta C++20)(hasta C++20)(hasta C++20)(hasta C++20)(C++20)
(C++11)
Guías de deducción(C++17)
Clases auxiliares
(C++11)
 
Definido en el archivo de encabezado <utility>
struct piecewise_construct_t { };
(desde C++11)
(hasta C++17)
struct piecewise_construct_t { explicit piecewise_construct_t() = default; };
(desde C++17)

std::piecewise_construct_t es un tipo etiqueta de clase vacía utilizado para desambiguar entre diferentes funciones que toman dos argumentos de tupla.

Las sobrecargas que no utilizan std::piecewise_construct_t suponen que cada argumento de tupla se vuelve un elemento de un par (std::pair). Las sobrecargas que utilizan std::piecewise_construct_t suponen que cada argumento de tupla es utilizado para construir, por parte por parte, un objeto nuevo del tipo especificado, que se volverá el elemento del par.

[editar] Ejemplo

#include <iostream>
#include <utility>
#include <tuple>
 
struct Foo {
    Foo(std::tuple<int, float>) 
    {
        std::cout << "Foo construida a partir de una tupla\n";
    }
    Foo(int, float) 
    {
        std::cout << "Foo construida a partir de un int y un float\n";
    }
};
 
int main()
{
    std::tuple<int, float> t(1, 3.14);
    std::pair<Foo, Foo> p1(t, t);
    std::pair<Foo, Foo> p2(std::piecewise_construct, t, t);
}

Salida:

Foo construida a partir de una tupla
Foo construida a partir de una tupla
Foo construida a partir de un int y un float
Foo construida a partir de un int y un float

[editar] Informes de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
LWG 2510 C++11 El constructor por defecto no era explicit, lo que podía llevar a ambigüedad. Se hizo explicit.

[editar] Véase también

Un objeto de tipo piecewise_construct_t utilizado para eliminar la ambigüedad de funciones para construcción por segmentos/tramos.
(constante) [editar]
Construye un par nuevo.
(función miembro pública de std::pair)