Namespaces
Variants

std::experimental:: make_unique_resource_checked

From cppreference.net
Definido en el encabezado <experimental/scope>
template < class R, class D, class S = std:: decay_t < R > >

std :: experimental :: unique_resource < std:: decay_t < R > , std:: decay_t < D >>
make_unique_resource_checked ( R && r, const S & invalid, D && d )

noexcept ( /*ver más abajo*/ ) ;
(library fundamentals TS v3)

Crea un unique_resource , inicializa su manejador de recurso almacenado con std:: forward < R > ( r ) y su eliminador con std:: forward < D > ( d ) . El unique_resource creado posee el recurso si y solo si bool ( r == invalid ) es false .

El programa está mal formado si la expresión r == invalid no puede ser convertida contextualmente a bool , y el comportamiento es indefinido si la conversión resulta en comportamiento indefinido o lanza una excepción.

Contenidos

Parámetros

r - un manejador de recursos
d - un eliminador para disponer del recurso
invalid - un valor que indica que el manejador de recursos no es válido

Valor de retorno

Un unique_resource descrito anteriormente.

Excepciones

Cualquier excepción lanzada durante la inicialización del manejador de recursos almacenado y el eliminador.

Notas

make_unique_resource_checked existe para evitar llamar a una función de eliminación con un argumento inválido.

Manejador de recurso r es copiado o movido al valor de retorno, y el unique_resource creado siempre mantiene un manejador de recurso subyacente con tipo de objeto.

Ejemplo

#include <cstdio>
#include <experimental/scope>
int main()
{
    // evitar llamar a fclose cuando fopen falla
    auto file = std::experimental::make_unique_resource_checked(
        std::fopen("potentially_nonexistent_file.txt", "r"),
        nullptr,
        [](std::FILE *fptr) { std::fclose(fptr); }
    );
    if (file.get())
        std::puts("The file exists.");
    else
        std::puts("The file does not exist.");
}

Salida posible:

The file does not exist.

Véase también