std::source_location
| Défini dans l'en-tête <source_location>
|
||
struct source_location;
|
(depuis C++20) | |
La classe std::source_location représente certaines informations sur le code source, telles que les noms de fichiers, les numéros de ligne et les noms de fonctions. Auparavant, les fonctions souhaitant obtenir ces informations sur le site d'appel (à des fins de journalisation, de test ou de débogage) devaient utiliser des macros afin que des macros prédéfinies comme __LINE__ et __FILE__ soient développées dans le contexte de l'appelant. La classe std::source_location offre une meilleure alternative.
std::source_location satisfait aux exigences DefaultConstructible, CopyConstructible, CopyAssignable, Destructible et Swappable.
De plus, les conditions suivantes sont true:
std::is_nothrow_move_constructible_v<std::source_location>,std::is_nothrow_move_assignable_v<std::source_location>, etstd::is_nothrow_swappable_v<std::source_location>.
Il est prévu que std::source_location ait une petite taille et puisse être copié efficacement.
Il n'est pas spécifié si les constructeurs de copie/déplacement et les opérateurs d'affectation de copie/déplacement de std::source_location sont triviaux et/ou constexpr.
Fonctions membres
Création |
|
construit un nouveau
source_location
avec des valeurs définies par l'implémentation
(fonction membre publique) |
|
|
[static]
|
construit un nouveau
source_location
correspondant à l'emplacement du site d'appel
(fonction membre publique statique) |
Accès aux champs |
|
|
retourne le numéro de ligne représenté par cet objet
(fonction membre publique) |
|
|
retourne le numéro de colonne représenté par cet objet
(fonction membre publique) |
|
|
retourne le nom du fichier représenté par cet objet
(fonction membre publique) |
|
|
retourne le nom de la fonction représentée par cet objet, s'il y en a un
(fonction membre publique) |
|
Notes
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_source_location
|
201907L
|
(C++20) |
Capture d'informations du code source (
std::source_location
)
|
Exemple
#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); // ligne 20 } int main(int, char*[]) { log("Hello world!"); // ligne 25 fun("Hello C++20!"); }
Sortie possible :
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!
Voir aussi
|
modifie le numéro de ligne du code source et, optionnellement, le nom du fichier courant
(directive de préprocesseur) |
|
|
(C++23)
|
représentation d'une évaluation dans une trace de pile
(classe) |