std::meta::is_accessible
Aus de.cppreference.net
| 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_CLSdie Klasse, die die Deklaration dessen enthält, wasrrepräsentiert, oder die abgeleitete Klasse in der direkten Basisbeziehung;DESIGNATING_CLSseictx.designating_class(), wenn es sich nicht um die Null-Reflexion handelt, oderPARENT_CLSandernfalls.
Das Ergebnis wird wie folgt bestimmt:
- Wenn
DESIGNATING_CLSnicht dasselbe wie oder nicht abgeleitet vonPARENT_CLSist, wirdfalsezurückgegeben. - Andernfalls, wenn
ctx.scope()die Null-Reflexion ist, wirdtruezurückgegeben. - Andernfalls, wenn
reine direkte Basisklassenbeziehung repräsentiert, bei der die BasisklasseBist, wirdtruezurückgegeben, wenn die BasisklasseBvonDESIGNATING_CLSinnerhalb vonctx.scope()zugreifbar ist; andernfalls wirdfalsezurückgegeben. - Andernfalls repräsentiert
reinen Member M. Es wirdtruezurückgegeben, wenn M als Member vonDESIGNATING_CLSinnerhalb vonctx.scope()zugreifbar wäre, wenn die Wirkung einer using-Deklaration ignoriert würde; andernfalls wirdfalsezurü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
Diesen Code ausführen
#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
(C++26) |
repräsentiert einen Kontext für die Zugriffsprüfung (Klasse) |