去除所有访问级别

This commit is contained in:
2026-08-07 17:50:04 +08:00
parent 0c7fac70b2
commit 3205dd84e8
17 changed files with 2086 additions and 2424 deletions
+18 -2
View File
@@ -25,11 +25,27 @@ struct Property_Descriptor {
using value_type = typename Accessor::value_type;
using storage_identity = typename Accessor::storage_identity;
using attribute_types = Type_List<Attributes...>;
static constexpr bool readable = Accessor::readable;
static constexpr bool writable = Accessor::writable;
using capability_type = find_attribute_in_list_t<Capability_Category, attribute_types>;
static constexpr Property_Capability intrinsic_capability = [] {
if constexpr (!std::same_as<capability_type, void>) {
return capability_type::value;
} else if constexpr (Accessor::readable && Accessor::writable) {
return Property_Capability::read_write;
} else if constexpr (Accessor::readable) {
return Property_Capability::read;
} else if constexpr (Accessor::writable) {
return Property_Capability::write;
} else {
return Property_Capability::none;
}
}();
static constexpr bool readable = Accessor::readable && (intrinsic_capability == Property_Capability::read || intrinsic_capability == Property_Capability::read_write);
static constexpr bool writable = Accessor::writable && (intrinsic_capability == Property_Capability::write || intrinsic_capability == Property_Capability::read_write);
static constexpr bool synchronized_view_read = Accessor::synchronized_view_read;
static constexpr bool trusted_object_access = Accessor::trusted_object_access;
static_assert(unique_single_value_categories<Attributes...>());
static_assert(!((intrinsic_capability == Property_Capability::read || intrinsic_capability == Property_Capability::read_write) && !Accessor::readable), "property capability requests read from a non-readable accessor");
static_assert(!((intrinsic_capability == Property_Capability::write || intrinsic_capability == Property_Capability::read_write) && !Accessor::writable), "property capability requests write from a non-writable accessor");
using key_type = find_attribute_in_list_t<Key_Category, attribute_types>;
static_assert(!std::same_as<key_type, void>);
static_assert(key_type::value.view().size() > 0);