std::source_location
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
- std::is_nothrow_move_constructible_v<std::source_location>,
- std::is_nothrow_move_assignable_v<std::source_location> and
- std::is_nothrow_swappable_v<std::source_location>
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) | |
[statisch] | erzeugt ein neues Objekt vom Type source_location mit korrekten Werten für die Aufrufstelle (public static Elementfunktion) |
Wertezugriff | |
gibt die Zeilennummer zurück (öffentliche Elementfunktion) | |
gibt die Spaltennummer zurück (öffentliche Elementfunktion) | |
gibt den Dateiname zurück (öffentliche Elementfunktion) | |
gibt den Funktionsnamen zurück (öffentliche Elementfunktion) |
[Bearbeiten] Beispiel
#include <iostream>#include <string_view>#include <source_location> void log(conststd::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
(C++23) | Darstellung eines Ertrags in einem Stacktrace (Klasse) |
Informationen über Dateiname und Zeilennummern |