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 la llamada (con fines de registro, pruebas o depuración) debían usar macros para que macros predefinidas como __LINE__ y __FILE__ se expandieran en el contexto de la persona que llama. La clase std::source_location proporciona una alternativa mejor.
std::source_location cumple con los requisitos de 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>, ystd::is_nothrow_swappable_v<std::source_location>.
Se pretende que std::source_location tenga un tamaño pequeño y se pueda copiar de manera eficiente.
No se especifica si los constructores copia/movimiento y los operadores de asignación copia/movimiento de std::source_location son triviales y/o constexpr.
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) |