std::source_location
| Определён в заголовке <source_location>
|
||
struct source_location;
|
(начиная с C++20) | |
Класс std::source_location представляет определённую информацию об исходном коде, такую как имена файлов, номера строк и имена функций. Ранее функции, желающие получить эту информацию о месте вызова (для целей журналирования, тестирования или отладки), должны были использовать макросы, чтобы предопределённые макросы, такие как __LINE__ и __FILE__, раскрывались в контексте вызывающей стороны. Класс std::source_location предоставляет лучшую альтернативу.
std::source_location удовлетворяет требованиям DefaultConstructible, CopyConstructible, CopyAssignable, Destructible и Swappable.
Кроме того, выполняются следующие условия true:
std::is_nothrow_move_constructible_v<std::source_location>,std::is_nothrow_move_assignable_v<std::source_location>иstd::is_nothrow_swappable_v<std::source_location>.
Предполагается, что std::source_location имеет небольшой размер и может эффективно копироваться.
Не уточняется, являются ли конструкторы копирования/перемещения и операторы присваивания копированием/перемещением std::source_location тривиальными и/или constexpr.
Функции-члены
Создание |
|
создаёт новый
source_location
с определёнными реализацией значениями
(public member function) |
|
|
[static]
|
создаёт новый
source_location
соответствующий местоположению точки вызова
(public static member function) |
Доступ к полям |
|
|
возвращает номер строки, представленный этим объектом
(public member function) |
|
|
возвращает номер колонки, представленный этим объектом
(public member function) |
|
|
возвращает имя файла, представленное этим объектом
(public member function) |
|
|
возвращает имя функции, представленное этим объектом, если оно есть
(public member function) |
|
Примечания
| Макрос тестирования возможностей | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_source_location
|
201907L
|
(C++20) |
Захват информации об исходном коде (
std::source_location
)
|
Пример
#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); // line 20 } int main(int, char*[]) { log("Hello world!"); // line 25 fun("Hello C++20!"); }
Возможный вывод:
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!
Смотрите также
|
изменяет номер строки исходного кода и, опционально, текущее имя файла
(директива препроцессора) |
|
|
(C++23)
|
представление вычисления в stacktrace
(класс) |