Добавляем место вызова в сообщения об ошибках на C++!
Когда ошибка обнаруживается глубоко внутри общей функции, по одному тексту лога бывает трудно найти её источник. В C++20 std::source_location позволяет получить файл и строку вызова без ручной передачи этих параметров.
Подключаем нужные заголовки:
include <iostream>
include <source_location>
include <string_view>{}
Добавляем source_location последним параметром со значением по умолчанию:
void logError(std::string_view message,
std::source_location where =
std::source_location::current()) {{}
current() вычисляется в месте вызова функции. Поэтому в лог попадёт файл и строка кода, откуда вызвали logError, а не строка внутри самой функции.
Формируем компактную запись с координатами:
std::cerr << where.file_name()
<< ":" << where.line()
<< " " << message << "\n";
}{}
Такой формат легко искать в CI-логах и локальном выводе. При необходимости к нему добавляется имя функции через where.function_name().
Вызываем логгер:
logError("config file is missing");{}
Компилятор подставит место этого вызова автоматически.
📣 C++ Ready | практика