- meta[meta header]
- std::meta[meta namespace]
- access_context[meta class]
- function[meta id-type]
- cpp26[meta cpp]
static consteval access_context current() noexcept;呼び出し元のスコープにおけるアクセス権に従うアクセスコンテキストを返す。
呼び出し元がクラスのメンバ関数やフレンド関数内であれば、そのクラスのprivate/protectedメンバにもアクセス可能なコンテキストとなる。
呼び出し元のアクセス権を反映したaccess_contextオブジェクトを返す。
#include <meta>
#include <print>
class C {
int secret = 42;
public:
int visible = 1;
static void inspect() {
// current()はC内部からの呼び出しなのでprivateメンバも見える
std::println("C内部から見えるメンバ:");
template for (constexpr auto m :
std::define_static_array(std::meta::nonstatic_data_members_of(
^^C, std::meta::access_context::current()))) {
std::println(" {}", std::meta::identifier_of(m));
}
}
};
int main() {
C::inspect();
// current()はmain関数からの呼び出しなのでpublicのみ
std::println("外部から見えるメンバ:");
template for (constexpr auto m :
std::define_static_array(std::meta::nonstatic_data_members_of(
^^C, std::meta::access_context::current()))) {
std::println(" {}", std::meta::identifier_of(m));
}
}- std::meta::access_context::current()[color ff0000]
- std::meta::nonstatic_data_members_of[link ../nonstatic_data_members_of.md]
- std::meta::identifier_of[link ../identifier_of.md]
C内部から見えるメンバ:
secret
visible
外部から見えるメンバ:
visible
- C++26
- Clang: ??
- GCC: 16 (
-freflectionオプション指定) [mark verified] - Visual C++: ??