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 qui souhaitaient obtenir ces informations sur le site d'appel (à des fins de journalisation, de test ou de débogage) devaient utiliser des macros afin que
les macros prédéfinies
comme
__LINE__
et
__FILE__
soient développées dans le contexte de l'appelant. La classe
std::source_location
fournit 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 > , et
- std:: 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 par copie/déplacement de
std::source_location
sont triviaux et/ou constexpr.
Table des matières |
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) |