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 со значениями, определяемыми реализацией (открытая функция-член) |
|
|
[static] | создаёт новый 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); // 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) | представление вычисления в трассировке стека (класс) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/source_location