std::source_location
| Definido en el archivo de encabezado <source_location>
|
||
struct source_location; |
(desde C++20) | |
La clase source_location representa cierta información acerca del código fuente, tales como nombres de archivo, números de línea, y nombres de función. Previamente, las funciones que deseaban obtener esta información acerca del punto de llamada (para registrar, probar o propósitos de depuración) tenían que usar macros para que las macros predefinidas, como __LINE__ y __FILE__, se expandieran en el contexto del llamante. La clase source_location proporciona una mejor alternativa.
source_location cumple con los requerimientos DefaultConstructible, CopyConstructible, CopyAssignable y Destructible. Un l-valor de source_location cumple con el requerimiento Swappable.
Además, las siguientes condiciones son verdaderas:
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 source_location tenga un tamaño pequeño y pueda copiarse eficientemente.
No está especificado si los constructores de copia/movimiento y los operadores de asignación de copia/movimiento de source_location son triviales y/o constexpr.
Funciones miembro
Creation | |
Construye un nuevo objeto de tipo source_location con valores definidos por la implementación. (función miembro pública) | |
[estático] |
Construye un nuevo objeto de tipo 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 representada 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 del archivo representado por este objeto. (función miembro pública) | |
| Devuelve el nombre de la función representada por este objeto, si es que la hay. (función miembro pública) | |
Ejemplo
#include <iostream>
#include <string_view>
#include <source_location>
void log(std::string_view message,
const std::source_location& location = std::source_location::current())
{
std::cout << "info:"
<< location.file_name() << ":"
<< location.line() << " "
<< message << '\n';
}
int main()
{
log("Hola, mundo!");
}
Posible salida:
info:main.cpp:15 Hola, mundo!