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. Lvalue объекта std::source_location удовлетворяет требованию 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 с реализационно-определенными значениями (публичный член-функция) |
|
|
[статический] | создает новый объект source_location, соответствующий месту вызова (публичная статическая член-функция) |
Доступ к полям |
|
| возвращает номер строки, представленной этим объектом (публичный член-функция) |
|
| возвращает номер столбца, представленный этим объектом (публичный член-функция) |
|
| возвращает имя файла, представленного этим объектом (публичный член-функция) |
|
| возвращает имя функции, представленной этим объектом, если таковое имеется (публичный член-функция) |
|
Примечания
| Макрокоманда проверки функций | Значение | Стандарт | Функция |
|---|---|---|---|
__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);
}
int main(int, char*[])
{
log("Hello world!");
fun("Hello C++20!");
}Возможный вывод:
file: main.cpp(23:8) `int main(int, char**)`: Hello world! file: main.cpp(18:8) `void fun(T) [with T = const char*]`: Hello C++20!
См. также
| изменяет номер строки исходного кода и, необязательно, текущее имя файла (директива препроцессора) |
|
|
(C++23) | представление оценки в трассировке стека (класс) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/source_location