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(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
(C++23) |
Darstellung eines Ertrags in einem Stacktrace (Klasse) |
Informationen über Dateiname und Zeilennummern |