Ежедневный бит(е) C++ #235. Утилита C++20 для получения информации о местоположении источника: std::source_location.
До C++20 получение информации о местоположении исходного кода (строка, файл, функция) требовало использования (иногда непереносимых) макросов.
std::source_location — это небольшая утилита C++20, которая инкапсулирует информацию о местоположении исходного кода в классе C++. Обратите внимание, что возвращаемые значения по-прежнему определяются реализацией.
#include <source_location> #include <string> #include <iostream> void logger(std::string message, // Tip: to capture source location at caller site, // use default argument: std::source_location caller = std::source_location::current()) { std::clog << "[" << caller.file_name() // Filename << ":" << caller.line() // Line number << "/" << caller.column() // Column number << "] " << caller.function_name() // Function name << " \"" << message << "\"\n"; } int main(int, char*[]) { logger("hello"); // [/app/example.cpp:15/11] int main(int, char**) "hello" [](){ logger("lambda"); }(); // [/app/example.cpp:18/17] main(int, char**)::<lambda()> "lambda" struct X { X() { logger("constructor"); } ~X() { logger("destructor"); } } var; // [/app/example.cpp:22/21] main(int, char**)::X::X() "constructor" // [/app/example.cpp:23/22] main(int, char**)::X::~X() "destructor" }
Откройте пример в Compiler Explorer.