Namespaces
Variants

std:: source_location

From cppreference.net
Utilities library
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 :

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)
représentation d'une évaluation dans une trace de pile
(classe)