Namespaces
Variants

std::meta::members_of

ja.cppreference.net より
< cpp | meta
 
 
 
リフレクションライブラリ
 
リフレクション型とクエリ
リフレクションクエリ
リフレクションレイアウトクエリ
型プロパティ
型プロパティクエリ
 
ヘッダ <meta>
consteval std::vector<std::meta::info>
    members_of( std::meta::info r, std::meta::access_context ctx );
で定義 (C++26以降)

std::vector を返します。これは r が表すクラス型または名前空間のメンバのリフレクションを、アクセスコンテキスト ctx でフィルタリングしたものを含みます。

結果の各リフレクション m は、適格な宣言を持ち、かつ 表現可能(下記参照)なアクセス可能なメンバを表します。アクセス可能性は std::meta::is_accessible(m, ctx) によって決定されます。

Q を、r が表すクラス型または名前空間とします。

宣言は、以下のすべての要件を満たす場合に 適格です:

  • Q のスコープ内にある。(例えば、ブロックスコープの関数宣言は適格ではありません。)
  • friend 宣言ではない。
  • クロージャ型 の宣言ではない。
  • (部分特殊化または完全特殊化を含む)テンプレート特殊化の宣言ではない。
  • Q がクロージャ型ではないクラス型である場合、その宣言は Q の直接メンバであり、 のネストされた無名共用体のバリアントメンバではない。Q
  • Q がクロージャ型である場合、その宣言は関数呼び出し演算子または関数呼び出し演算子テンプレートを導入する。

クロージャ型 Q の他のメンバの宣言が適格かどうかは処理系定義です。

members_of 呼び出しより前の宣言のみが考慮されます。

メンバは、以下のいずれかである場合に 表現可能です:

  • クラス型または列挙型
  • 型エイリアス
  • クラステンプレート、関数テンプレート、変数テンプレート、エイリアステンプレート、またはコンセプト
  • 未推論の プレースホルダ型
  • を含まない型を持つ変数または参照F関数
  • であって、以下を満たすもの:F
  • の型が未推論のプレースホルダ型を含まない;F
  • の制約(もしあれば)が満たされる;かつFプロスペクティブデストラクタ である場合、選択されたデストラクタである
  • データメンバ
  • 名前空間
  • 名前空間エイリアス

この関数は、Q のスコープで宣言された無名ビットフィールドを、同じアクセスを持つデータメンバとして扱います。

クラスメンバと無名ビットフィールドのリフレクションは、宣言された順序で現れます。暗黙に宣言された特殊メンバは、ユーザ定義メンバの後に現れます。

引数

r - 完全なクラス型または名前空間のリフレクション
ctx - アクセスコンテキスト

戻り値

クラスメンバまたは名前空間メンバを表すリフレクション値の std::vector。

例外

std::meta::exception を送出します。ただし、std::meta::dealias(r) が評価コンテキストのある時点で完全なクラス型、または名前空間のいずれかを表す場合を除きます。

例

関連項目

(C++26)
リフレクションされたクラスのアクセス可能な直接基底を取得します
(関数)