std::source_location
ja.cppreference.net より
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 であるかどうかは未規定です。
メンバー関数
Creation |
|
実装定義の値で新しい
source_location
を構築する
(public member function) |
|
|
[static]
|
呼び出し元の位置に対応する新しい
source_location
を構築する
(public static member function) |
Field access |
|
|
このオブジェクトが表す行番号を返す
(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)
|
スタックトレース内の評価の表現
(クラス) |