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
(класс) |