Namespaces
Variants

std::meta::is_accessible

Aus de.cppreference.net
< cpp | meta
 
 
 
Reflexionsbibliothek
 
Reflexionstypen und -abfragen
Reflexionsabfragen
Reflexionslayout-Abfragen
Typeigenschaften
Typeigenschaftsabfragen
 
Definiert in Header <meta>
consteval bool is_accessible( std::meta::info r, std::meta::access_context ctx );
(seit C++26)

Bestimmt, ob der durch r repräsentierte Member oder die Basisklasse im Kontext von zugreifbarctx ist.

Wenn r keinen Klassenmember oder keine direkte Basisklassenbeziehung repräsentiert, wird true zurückgegeben. Andernfalls sei:

  • PARENT_CLS die Klasse, die die Deklaration dessen enthält, was r repräsentiert, oder die abgeleitete Klasse in der direkten Basisbeziehung;
  • DESIGNATING_CLS sei ctx.designating_class(), wenn es sich nicht um die Null-Reflexion handelt, oder PARENT_CLS andernfalls.

Das Ergebnis wird wie folgt bestimmt:

  • Wenn DESIGNATING_CLS nicht dasselbe wie oder nicht abgeleitet von PARENT_CLS ist, wird false zurückgegeben.
  • Andernfalls, wenn ctx.scope() die Null-Reflexion ist, wird true zurückgegeben.
  • Andernfalls, wenn r eine direkte Basisklassenbeziehung repräsentiert, bei der die Basisklasse B ist, wird true zurückgegeben, wenn die Basisklasse B von DESIGNATING_CLS innerhalb von ctx.scope() zugreifbar ist; andernfalls wird false zurückgegeben.
  • Andernfalls repräsentiert r einen Member M. Es wird true zurückgegeben, wenn M als Member von DESIGNATING_CLS innerhalb von ctx.scope() zugreifbar wäre, wenn die Wirkung einer using-Deklaration ignoriert würde; andernfalls wird false zurückgegeben.

Diese Funktion behandelt ein unbenanntes Bitfeld als nicht-statischen Datenmember mit demselben Zugriff.

Parameter

r - ein Reflexionswert
ctx - ein Zugriffskontext

Rückgabewert

true, wenn das, was r repräsentiert, im Kontext ctx zugreifbar ist, andernfalls false

Ausnahmen

Wirft std::meta::exception, wenn r einen Member einer aktuell definierten Klasse repräsentiert.

Beispiel

#include <meta>

consteval std::meta::access_context fn()
{
    return std::meta::access_context::current();
}

class C
{
    [[maybe_unused]] int moo;
    friend consteval std::meta::access_context fn();

public:
    static constexpr auto r{^^moo};
};

static_assert(is_accessible(C::r, fn()) == true);
static_assert(is_accessible(C::r, std::meta::access_context::current()) == false);
static_assert(is_accessible(C::r, std::meta::access_context::unchecked()) == true);

int main() {}

Siehe auch

repräsentiert einen Kontext für die Zugriffsprüfung
(Klasse)