std::source_location
From cppreference.com
| ヘッダー <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) |
スタックトレース内の評価の表現 (クラス) |