std:: source_location
|
Definido en el encabezado
<source_location>
|
||
|
struct
source_location
;
|
(desde C++20) | |
La clase
std::source_location
representa cierta información sobre el código fuente, como nombres de archivo, números de línea y nombres de función. Anteriormente, las funciones que deseaban obtener esta información sobre el sitio de llamada (para propósitos de registro, pruebas o depuración) debían usar macros para que
macros predefinidas
como
__LINE__
y
__FILE__
se expandieran en el contexto del llamador. La clase
std::source_location
proporciona una alternativa mejor.
std::source_location
cumple con los requisitos
DefaultConstructible
,
CopyConstructible
,
CopyAssignable
,
Destructible
y
Swappable
.
Además, las siguientes condiciones son true :
- std:: is_nothrow_move_constructible_v < std :: source_location > ,
- std:: is_nothrow_move_assignable_v < std :: source_location > , y
- std:: is_nothrow_swappable_v < std :: source_location > .
Se pretende que
std::source_location
tenga un tamaño reducido y pueda copiarse eficientemente.
No está especificado si los constructores de copia/traslado y los operadores de asignación de copia/traslado de
std::source_location
son triviales y/o constexpr.
Contenidos |
Funciones miembro
Creación |
|
construye un nuevo
source_location
con valores definidos por la implementación
(función miembro pública) |
|
|
[static]
|
construye un nuevo
source_location
correspondiente a la ubicación del sitio de llamada
(función miembro estática pública) |
Acceso a campos |
|
|
devuelve el número de línea representado por este objeto
(función miembro pública) |
|
|
devuelve el número de columna representado por este objeto
(función miembro pública) |
|
|
devuelve el nombre de archivo representado por este objeto
(función miembro pública) |
|
|
devuelve el nombre de la función representada por este objeto, si existe
(función miembro pública) |
|
Notas
| Macro de prueba de características | Valor | Std | Característica |
|---|---|---|---|
__cpp_lib_source_location
|
201907L
|
(C++20) |
Captura de información del código fuente (
std::source_location
)
|
Ejemplo
#include <iostream> #include <source_location> #include <string_view> void log(const std::string_view message, const std::source_location location = std::source_location::current()) { std::clog << "file: " << location.file_name() << '(' << location.line() << ':' << location.column() << ") `" << location.function_name() << "`: " << message << '\n'; } template<typename T> void fun(T x) { log(x); // línea 20 } int main(int, char*[]) { log("Hello world!"); // línea 25 fun("Hello C++20!"); }
Salida posible:
file: main.cpp(25:8) `int main(int, char**)`: Hello world! file: main.cpp(20:8) `void fun(T) [with T = const char*]`: Hello C++20!
Véase también
|
cambia el número de línea del código fuente y, opcionalmente, el nombre del archivo actual
(directiva de preprocesamiento) |
|
|
(C++23)
|
representación de una evaluación en un seguimiento de pila
(clase) |