std::meta::access_context::via
consteval std::meta::access_context via( std::meta::info cls ) const; |
Возвращает новый access_context, связанная область видимости которого — this->scope(), а обозначающий класс — cls.
Параметры
| cls | - | отражение типа класса или нулевое отражение |
Возвращаемое значение
Объект access_context, описанный выше.
Исключения
Выбрасывает std::meta::exception, если cls не является ни нулевым отражением, ни отражением полного типа класса.
Примечания
Обозначающий класс — это класс, используемый для именования члена. Например, в C::member обозначающим классом является C; в obj.member обозначающим классом является тип obj.
Один и тот же член может иметь разную доступность при обозначении в разных классах.
Пример
#include <meta>
struct Base { static constexpr int mem = 42; };
struct Derived : private Base
{
static constexpr auto ctx = std::meta::access_context::current();
};
constexpr auto ctx = std::meta::access_context::unprivileged();
int x = Base::mem; // OK, Base::mem is public
static_assert(std::meta::is_accessible(^^Base::mem, ctx));
// int y = Derived::mem; // Error: Base::mem is private in Derived
static_assert(!std::meta::is_accessible(^^Base::mem, ctx.via(^^Derived)));
// The private Derived::mem is accessible in the scope of Derived
static_assert(std::meta::is_accessible(^^Base::mem, Derived::ctx.via(^^Derived)));
int main() {}
См. также
| возвращают соответственно связанную область видимости и обозначающий класс (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/meta/access_context/via