Namespaces
Variants

std::experimental:: source_location

From cppreference.net
Défini dans l'en-tête <experimental/source_location>
struct source_location ;
(bibliothèque fundamentals TS v2)

La classe 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 source_location offre une meilleure alternative.

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
(fonction membre statique publique)
Autres fonctions membres spéciales
(destructeur)
(implicitement déclaré)
détruit un source_location
(fonction membre publique)
operator=
(implicitement déclaré)
opérateurs d'affectation de copie/déplacement implicitement déclarés
(fonction membre publique)
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 de 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 une
(fonction membre publique)

Exemple

#include <experimental/source_location>
#include <iostream>
#include <string_view>
void log(const std::string_view message,
         const std::experimental::source_location location =
               std::experimental::source_location::current())
{
    std::cout << "info:"
              << location.file_name() << ':'
              << location.line() << ' '
              << message << '\n';
}
int main()
{
    log("Hello world!");
}

Sortie possible :

info:main.cpp:15 Hello world!