Namensräume
Varianten
Aktionen

std::source_location

Aus cppreference.com
< cpp‎ | utility
definiert in Header <source_location>
struct source_location;

Die Klasse source_location liefert eine Reihe von Informationen über den Quellkode wie z.B. Dateiname, Zeilennummer und Funktionsnamen. Vor C++20 mußten Funktionen, die Informationen über den Quellkode an der Stelle des Aufrufs benötigten (z.B. fürs Protokollieren, Testen oder Fehlersuchen), Makros benutzen wie __LINE__ und __FILE__, die an der Aufrufstelle expandiert wurden. Die Klasse source_location stellt eine bessere Alternative dar.

Die Klasse source_location erfüllt die Anforderungen für DefaultConstructible, CopyConstructible, CopyAssignable und Destructible. Ein lokalisierbarer Wert (lvalue) von source_location erfüllt zusätzlich die Anforderungen für Swappable. Zusätzlich sind folgende Bedingungen

erfüllt.

Es ist erstrebenswert, daß source_location eine geringe Größe hat und effizient kopiert werden kann.

Es ist undefiniert, ob der Kopier- und Verschiebekonstruktor und die Kopier- und Verschiebezuweisungsoperatoren von source_location trivial oder constexpr sind.

Inhaltsverzeichnis

[Bearbeiten] Methoden

Erzeugung
erzeugt ein neues Objekt von source_location mit implementationsabhängigen Werten
(öffentliche Elementfunktion) [edit]
[statisch]
erzeugt ein neues Objekt vom Type source_location mit korrekten Werten für die Aufrufstelle
(public static Elementfunktion) [edit]
Wertezugriff
gibt die Zeilennummer zurück
(öffentliche Elementfunktion) [edit]
gibt die Spaltennummer zurück
(öffentliche Elementfunktion) [edit]
gibt den Dateiname zurück
(öffentliche Elementfunktion) [edit]
gibt den Funktionsnamen zurück
(öffentliche Elementfunktion) [edit]

[Bearbeiten] Beispiel

#include <iostream>
#include <string_view>
#include <source_location>
 
void log(const std::string_view message,
         const std::source_location location = 
               std::source_location::current())
{
    std::cout << "file: "
              << location.file_name() << "("
              << location.line() << ":"
              << location.column() << ") `"
              << location.function_name() << "`: "
              << message << '\n';
}
 
template <typename T> void fun(T x)
{
    log(x);
}
 
int main(int, char*[])
{
    log("Hello world!");
    fun("Hello C++20!");
}

Possible output:

file: main.cpp(23:8) `int main(int, char**)`: Hello world!
file: main.cpp(18:8) `void fun(T) [with T = const char*]`: Hello C++20!

[Bearbeiten] Referenzen

Darstellung eines Ertrags in einem Stacktrace
(Klasse) [edit]
Informationen über Dateiname und Zeilennummern