remove public resolve_constructor_type/resolve_destructor_type

This commit is contained in:
BlackMATov
2024-02-08 15:17:52 +07:00
parent c1788f5c8b
commit d6431f85d1
4 changed files with 79 additions and 57 deletions

View File

@@ -4698,23 +4698,6 @@ namespace meta_hpp
}
}
namespace meta_hpp
{
template < class_kind Class, typename... Args >
[[nodiscard]] constructor_type resolve_constructor_type() {
using namespace detail;
type_registry& registry = type_registry::instance();
return registry.resolve_constructor_type<Class, Args...>();
}
template < class_kind Class >
[[nodiscard]] destructor_type resolve_destructor_type() {
using namespace detail;
type_registry& registry = type_registry::instance();
return registry.resolve_destructor_type<Class>();
}
}
namespace meta_hpp
{
template < typename F >

View File

@@ -15,9 +15,6 @@ namespace
struct ivec2 {
int x{}, y{};
explicit ivec2(int nv) : x{nv}, y{nv} {}
ivec2(int nx, int ny) : x{nx}, y{ny} {}
};
struct another_ivec2 {
@@ -78,11 +75,19 @@ TEST_CASE("meta/meta_shared/tests") {
REQUIRE(ivec2_dtor);
REQUIRE(another_ivec2_dtor);
CHECK(ivec2_ctor0.get_type() == meta::resolve_constructor_type<ivec2, const ivec2&>());
CHECK(ivec2_ctor1.get_type() == meta::resolve_constructor_type<ivec2, int>());
CHECK(ivec2_ctor2.get_type() == meta::resolve_constructor_type<ivec2, int, int>());
CHECK(ivec2_dtor.get_type() == meta::resolve_destructor_type<ivec2>());
CHECK(another_ivec2_dtor.get_type() == meta::resolve_destructor_type<another_ivec2>());
CHECK(ivec2_ctor0.get_type().get_owner_type() == meta::resolve_type<ivec2>());
CHECK(ivec2_ctor0.get_type().get_argument_type(0) == meta::resolve_type<const ivec2&>());
CHECK(ivec2_ctor1.get_type().get_owner_type() == meta::resolve_type<ivec2>());
CHECK(ivec2_ctor1.get_type().get_argument_type(0) == meta::resolve_type<int>());
CHECK(ivec2_ctor2.get_type().get_owner_type() == meta::resolve_type<ivec2>());
CHECK(ivec2_ctor2.get_type().get_argument_type(0) == meta::resolve_type<int>());
CHECK(ivec2_ctor2.get_type().get_argument_type(1) == meta::resolve_type<int>());
CHECK(ivec2_dtor.get_type().get_owner_type() == meta::resolve_type<ivec2>());
CHECK(another_ivec2_dtor.get_type().get_owner_type() == meta::resolve_type<another_ivec2>());
CHECK(ivec2_ctor0 != ivec2_ctor1);
CHECK(ivec2_ctor1 != ivec2_ctor2);

View File

@@ -47,7 +47,7 @@ namespace
++constructor_counter;
}
clazz_noncopyable(clazz_noncopyable&& other) : i{other.i} {
clazz_noncopyable(clazz_noncopyable&& other) noexcept : i{other.i} {
other.i = 0;
++move_constructor_counter;
}
@@ -88,7 +88,10 @@ TEST_CASE("meta/meta_states/ctor/noncopyable") {
{
const meta::constructor ctor = clazz_type.get_constructor_with<int>();
REQUIRE(ctor);
CHECK(ctor.get_type() == meta::resolve_constructor_type<clazz_t, int>());
CHECK(ctor.get_type().get_owner_type() == meta::resolve_type<clazz_t>());
CHECK(ctor.get_type().get_arity() == 1);
CHECK(ctor.get_type().get_argument_type(0) == meta::resolve_type<int>());
}
{
const meta::uvalue v = clazz_type.create(42);
@@ -106,7 +109,11 @@ TEST_CASE("meta/meta_states/ctor/noncopyable") {
{
const meta::constructor ctor = clazz_type.get_constructor_with<clazz_t&&>();
REQUIRE(ctor);
CHECK(ctor.get_type() == meta::resolve_constructor_type<clazz_t, clazz_t&&>());
CHECK(ctor.get_type().get_owner_type() == meta::resolve_type<clazz_t>());
CHECK(ctor.get_type().get_arity() == 1);
CHECK(ctor.get_type().get_argument_type(0) == meta::resolve_type<clazz_t&&>());
CHECK(ctor.get_type().get_flags() == meta::constructor_flags::is_noexcept);
}
{
clazz_t o{42};
@@ -146,8 +153,10 @@ TEST_CASE("meta/meta_states/ctor/as_object") {
{
const meta::constructor ctor = clazz_type.get_constructor_with<int>();
REQUIRE(ctor);
CHECK(ctor.get_type() == meta::resolve_constructor_type<clazz_t, int>());
CHECK(ctor.get_type().get_owner_type() == meta::resolve_type<clazz_t>());
CHECK(ctor.get_type().get_arity() == 1);
CHECK(ctor.get_type().get_argument_type(0) == meta::resolve_type<int>());
CHECK(ctor.get_type().get_flags() == meta::constructor_bitflags{});
}
{
@@ -221,8 +230,10 @@ TEST_CASE("meta/meta_states/ctor/as_object") {
{
const meta::constructor ctor = clazz_type.get_constructor_with<clazz_t&&>();
REQUIRE(ctor);
CHECK(ctor.get_type() == meta::resolve_constructor_type<clazz_t, clazz_t&&>());
CHECK(ctor.get_type().get_owner_type() == meta::resolve_type<clazz_t>());
CHECK(ctor.get_type().get_arity() == 1);
CHECK(ctor.get_type().get_argument_type(0) == meta::resolve_type<clazz_t&&>());
CHECK(ctor.get_type().get_flags() == meta::constructor_flags::is_noexcept);
}
{
@@ -260,7 +271,11 @@ TEST_CASE("meta/meta_states/ctor/as_object") {
{
const meta::constructor ctor = clazz_type.get_constructor_with<const clazz_t&>();
REQUIRE(ctor);
CHECK(ctor.get_type() == meta::resolve_constructor_type<clazz_t, const clazz_t&>());
CHECK(ctor.get_type().get_owner_type() == meta::resolve_type<clazz_t>());
CHECK(ctor.get_type().get_arity() == 1);
CHECK(ctor.get_type().get_argument_type(0) == meta::resolve_type<const clazz_t&>());
CHECK(ctor.get_type().get_flags() == meta::constructor_bitflags{});
}
{
clazz_t o{42};
@@ -316,7 +331,11 @@ TEST_CASE("meta/meta_states/ctor/as_raw_pointer") {
{
const meta::constructor ctor = clazz_type.get_constructor_with<int>();
REQUIRE(ctor);
CHECK(ctor.get_type() == meta::resolve_constructor_type<clazz_t, int>());
CHECK(ctor.get_type().get_owner_type() == meta::resolve_type<clazz_t>());
CHECK(ctor.get_type().get_arity() == 1);
CHECK(ctor.get_type().get_argument_type(0) == meta::resolve_type<int>());
CHECK(ctor.get_type().get_flags() == meta::constructor_bitflags{});
}
{
const meta::uvalue v = clazz_type.create(42);
@@ -334,7 +353,11 @@ TEST_CASE("meta/meta_states/ctor/as_raw_pointer") {
{
const meta::constructor ctor = clazz_type.get_constructor_with<clazz_t&&>();
REQUIRE(ctor);
CHECK(ctor.get_type() == meta::resolve_constructor_type<clazz_t, clazz_t&&>());
CHECK(ctor.get_type().get_owner_type() == meta::resolve_type<clazz_t>());
CHECK(ctor.get_type().get_arity() == 1);
CHECK(ctor.get_type().get_argument_type(0) == meta::resolve_type<clazz_t&&>());
CHECK(ctor.get_type().get_flags() == meta::constructor_flags::is_noexcept);
}
{
clazz_t o{42};
@@ -353,7 +376,11 @@ TEST_CASE("meta/meta_states/ctor/as_raw_pointer") {
{
const meta::constructor ctor = clazz_type.get_constructor_with<const clazz_t&>();
REQUIRE(ctor);
CHECK(ctor.get_type() == meta::resolve_constructor_type<clazz_t, const clazz_t&>());
CHECK(ctor.get_type().get_owner_type() == meta::resolve_type<clazz_t>());
CHECK(ctor.get_type().get_arity() == 1);
CHECK(ctor.get_type().get_argument_type(0) == meta::resolve_type<const clazz_t&>());
CHECK(ctor.get_type().get_flags() == meta::constructor_bitflags{});
}
{
clazz_t o{42};
@@ -391,7 +418,11 @@ TEST_CASE("meta/meta_states/ctor/as_shared_pointer") {
{
const meta::constructor ctor = clazz_type.get_constructor_with<int>();
REQUIRE(ctor);
CHECK(ctor.get_type() == meta::resolve_constructor_type<clazz_t, int>());
CHECK(ctor.get_type().get_owner_type() == meta::resolve_type<clazz_t>());
CHECK(ctor.get_type().get_arity() == 1);
CHECK(ctor.get_type().get_argument_type(0) == meta::resolve_type<int>());
CHECK(ctor.get_type().get_flags() == meta::constructor_bitflags{});
}
{
const meta::uvalue v = clazz_type.create(42);
@@ -409,7 +440,11 @@ TEST_CASE("meta/meta_states/ctor/as_shared_pointer") {
{
const meta::constructor ctor = clazz_type.get_constructor_with<clazz_t&&>();
REQUIRE(ctor);
CHECK(ctor.get_type() == meta::resolve_constructor_type<clazz_t, clazz_t&&>());
CHECK(ctor.get_type().get_owner_type() == meta::resolve_type<clazz_t>());
CHECK(ctor.get_type().get_arity() == 1);
CHECK(ctor.get_type().get_argument_type(0) == meta::resolve_type<clazz_t&&>());
CHECK(ctor.get_type().get_flags() == meta::constructor_flags::is_noexcept);
}
{
clazz_t o{42};
@@ -428,7 +463,11 @@ TEST_CASE("meta/meta_states/ctor/as_shared_pointer") {
{
const meta::constructor ctor = clazz_type.get_constructor_with<const clazz_t&>();
REQUIRE(ctor);
CHECK(ctor.get_type() == meta::resolve_constructor_type<clazz_t, const clazz_t&>());
CHECK(ctor.get_type().get_owner_type() == meta::resolve_type<clazz_t>());
CHECK(ctor.get_type().get_arity() == 1);
CHECK(ctor.get_type().get_argument_type(0) == meta::resolve_type<const clazz_t&>());
CHECK(ctor.get_type().get_flags() == meta::constructor_bitflags{});
}
{
clazz_t o{42};
@@ -466,7 +505,11 @@ TEST_CASE("meta/meta_states/ctor/as_unique_pointer") {
{
const meta::constructor ctor = clazz_type.get_constructor_with<int>();
REQUIRE(ctor);
CHECK(ctor.get_type() == meta::resolve_constructor_type<clazz_t, int>());
CHECK(ctor.get_type().get_owner_type() == meta::resolve_type<clazz_t>());
CHECK(ctor.get_type().get_arity() == 1);
CHECK(ctor.get_type().get_argument_type(0) == meta::resolve_type<int>());
CHECK(ctor.get_type().get_flags() == meta::constructor_bitflags{});
}
{
const meta::uvalue v = clazz_type.create(42);
@@ -484,7 +527,11 @@ TEST_CASE("meta/meta_states/ctor/as_unique_pointer") {
{
const meta::constructor ctor = clazz_type.get_constructor_with<clazz_t&&>();
REQUIRE(ctor);
CHECK(ctor.get_type() == meta::resolve_constructor_type<clazz_t, clazz_t&&>());
CHECK(ctor.get_type().get_owner_type() == meta::resolve_type<clazz_t>());
CHECK(ctor.get_type().get_arity() == 1);
CHECK(ctor.get_type().get_argument_type(0) == meta::resolve_type<clazz_t&&>());
CHECK(ctor.get_type().get_flags() == meta::constructor_flags::is_noexcept);
}
{
clazz_t o{42};
@@ -503,7 +550,11 @@ TEST_CASE("meta/meta_states/ctor/as_unique_pointer") {
{
const meta::constructor ctor = clazz_type.get_constructor_with<const clazz_t&>();
REQUIRE(ctor);
CHECK(ctor.get_type() == meta::resolve_constructor_type<clazz_t, const clazz_t&>());
CHECK(ctor.get_type().get_owner_type() == meta::resolve_type<clazz_t>());
CHECK(ctor.get_type().get_arity() == 1);
CHECK(ctor.get_type().get_argument_type(0) == meta::resolve_type<const clazz_t&>());
CHECK(ctor.get_type().get_flags() == meta::constructor_bitflags{});
}
{
clazz_t o{42};

View File

@@ -58,23 +58,6 @@ namespace meta_hpp
}
}
namespace meta_hpp
{
template < class_kind Class, typename... Args >
[[nodiscard]] constructor_type resolve_constructor_type() {
using namespace detail;
type_registry& registry = type_registry::instance();
return registry.resolve_constructor_type<Class, Args...>();
}
template < class_kind Class >
[[nodiscard]] destructor_type resolve_destructor_type() {
using namespace detail;
type_registry& registry = type_registry::instance();
return registry.resolve_destructor_type<Class>();
}
}
namespace meta_hpp
{
template < typename F >