From 8dbbf7417cd5445287441ffbba3730f992616863 Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Sun, 12 Feb 2023 02:39:25 +0700 Subject: [PATCH] reduce some boilerplate --- develop/singles/headers/meta.hpp/meta_all.hpp | 154 +++++------------- .../meta_detail/value_utilities/uarg.hpp | 4 +- .../meta_detail/value_utilities/uinst.hpp | 4 +- headers/meta.hpp/meta_invoke/invoke.hpp | 52 ++---- headers/meta.hpp/meta_states/constructor.hpp | 40 ++--- headers/meta.hpp/meta_states/function.hpp | 30 +--- headers/meta.hpp/meta_states/method.hpp | 24 +-- 7 files changed, 90 insertions(+), 218 deletions(-) diff --git a/develop/singles/headers/meta.hpp/meta_all.hpp b/develop/singles/headers/meta.hpp/meta_all.hpp index 9ff6491..803e301 100644 --- a/develop/singles/headers/meta.hpp/meta_all.hpp +++ b/develop/singles/headers/meta.hpp/meta_all.hpp @@ -5228,7 +5228,7 @@ namespace meta_hpp::detail }; public: - uarg_base() = delete; + uarg_base() = default; ~uarg_base() = default; uarg_base(uarg_base&&) = default; @@ -5298,7 +5298,7 @@ namespace meta_hpp::detail { class uarg final : public uarg_base { public: - uarg() = delete; + uarg() = default; ~uarg() = default; uarg(uarg&&) = default; @@ -5719,13 +5719,9 @@ namespace meta_hpp template < typename... Args > uvalue function::invoke(Args&&... args) const { - if constexpr ( sizeof...(Args) > 0 ) { - using namespace detail; - const std::array vargs{uarg{std::forward(args)}...}; - return state_->invoke(vargs); - } else { - return state_->invoke({}); - } + using namespace detail; + const std::array vargs{uarg{std::forward(args)}...}; + return state_->invoke(vargs); } template < typename... Args > @@ -5743,24 +5739,16 @@ namespace meta_hpp template < typename... Args > bool function::is_invocable_with() const noexcept { - if constexpr ( sizeof...(Args) > 0 ) { - using namespace detail; - const std::array vargs{uarg_base{type_list{}}...}; - return state_->is_invocable_with(vargs); - } else { - return state_->is_invocable_with({}); - } + using namespace detail; + const std::array vargs{uarg_base{type_list{}}...}; + return state_->is_invocable_with(vargs); } template < typename... Args > bool function::is_invocable_with(Args&&... args) const noexcept { - if constexpr ( sizeof...(Args) > 0 ) { - using namespace detail; - const std::array vargs{uarg_base{std::forward(args)}...}; - return state_->is_invocable_with(vargs); - } else { - return state_->is_invocable_with({}); - } + using namespace detail; + const std::array vargs{uarg_base{std::forward(args)}...}; + return state_->is_invocable_with(vargs); } inline argument function::get_argument(std::size_t position) const noexcept { @@ -5784,7 +5772,7 @@ namespace meta_hpp::detail }; public: - uinst_base() = delete; + uinst_base() = default; ~uinst_base() = default; uinst_base(uinst_base&&) = default; @@ -5859,7 +5847,7 @@ namespace meta_hpp::detail { class uinst final : public uinst_base { public: - uinst() = delete; + uinst() = default; ~uinst() = default; uinst(uinst&&) = default; @@ -6464,12 +6452,8 @@ namespace meta_hpp uvalue method::invoke(Instance&& instance, Args&&... args) const { using namespace detail; const uinst vinst{std::forward(instance)}; - if constexpr ( sizeof...(Args) > 0 ) { - const std::array vargs{uarg{std::forward(args)}...}; - return state_->invoke(vinst, vargs); - } else { - return state_->invoke(vinst, {}); - } + const std::array vargs{uarg{std::forward(args)}...}; + return state_->invoke(vinst, vargs); } template < typename Instance, typename... Args > @@ -6489,24 +6473,16 @@ namespace meta_hpp bool method::is_invocable_with() const noexcept { using namespace detail; const uinst_base vinst{type_list{}}; - if constexpr ( sizeof...(Args) > 0 ) { - const std::array vargs{uarg_base{type_list{}}...}; - return state_->is_invocable_with(vinst, vargs); - } else { - return state_->is_invocable_with(vinst, {}); - } + const std::array vargs{uarg_base{type_list{}}...}; + return state_->is_invocable_with(vinst, vargs); } template < typename Instance, typename... Args > bool method::is_invocable_with(Instance&& instance, Args&&... args) const noexcept { using namespace detail; const uinst_base vinst{std::forward(instance)}; - if constexpr ( sizeof...(Args) > 0 ) { - const std::array vargs{uarg_base{std::forward(args)}...}; - return state_->is_invocable_with(vinst, vargs); - } else { - return state_->is_invocable_with(vinst, {}); - } + const std::array vargs{uarg_base{std::forward(args)}...}; + return state_->is_invocable_with(vinst, vargs); } inline argument method::get_argument(std::size_t position) const noexcept { @@ -6528,12 +6504,8 @@ namespace meta_hpp template < detail::function_pointer_kind Function, typename... Args > uvalue invoke(Function function_ptr, Args&&... args) { using namespace detail; - if constexpr ( sizeof...(Args) > 0 ) { - const std::array vargs{uarg{std::forward(args)}...}; - return raw_function_invoke(function_ptr, vargs); - } else { - return raw_function_invoke(function_ptr, {}); - } + const std::array vargs{uarg{std::forward(args)}...}; + return raw_function_invoke(function_ptr, vargs); } } @@ -6563,12 +6535,8 @@ namespace meta_hpp uvalue invoke(Method method_ptr, Instance&& instance, Args&&... args) { using namespace detail; const uinst vinst{std::forward(instance)}; - if constexpr ( sizeof...(Args) > 0 ) { - const std::array vargs{uarg{std::forward(args)}...}; - return raw_method_invoke(method_ptr, vinst, vargs); - } else { - return raw_method_invoke(method_ptr, vinst, {}); - } + const std::array vargs{uarg{std::forward(args)}...}; + return raw_method_invoke(method_ptr, vinst, vargs); } } @@ -6586,24 +6554,16 @@ namespace meta_hpp template < detail::function_pointer_kind Function, typename... Args > bool is_invocable_with() { - if constexpr ( sizeof...(Args) > 0 ) { - using namespace detail; - const std::array vargs{uarg_base{type_list{}}...}; - return raw_function_is_invocable_with(vargs); - } else { - return raw_function_is_invocable_with({}); - } + using namespace detail; + const std::array vargs{uarg_base{type_list{}}...}; + return raw_function_is_invocable_with(vargs); } template < detail::function_pointer_kind Function, typename... Args > bool is_invocable_with(Args&&... args) { - if constexpr ( sizeof...(Args) > 0 ) { - using namespace detail; - const std::array vargs{uarg_base{std::forward(args)}...}; - return raw_function_is_invocable_with(vargs); - } else { - return raw_function_is_invocable_with({}); - } + using namespace detail; + const std::array vargs{uarg_base{std::forward(args)}...}; + return raw_function_is_invocable_with(vargs); } } @@ -6650,24 +6610,16 @@ namespace meta_hpp bool is_invocable_with() { using namespace detail; const uinst_base vinst{type_list{}}; - if constexpr ( sizeof...(Args) > 0 ) { - const std::array vargs{uarg_base{type_list{}}...}; - return raw_method_is_invocable_with(vinst, vargs); - } else { - return raw_method_is_invocable_with(vinst, {}); - } + const std::array vargs{uarg_base{type_list{}}...}; + return raw_method_is_invocable_with(vinst, vargs); } template < detail::method_pointer_kind Method, typename Instance, typename... Args > bool is_invocable_with(Instance&& instance, Args&&... args) { using namespace detail; const uinst_base vinst{std::forward(instance)}; - if constexpr ( sizeof...(Args) > 0 ) { - const std::array vargs{uarg_base{std::forward(args)}...}; - return raw_method_is_invocable_with(vinst, vargs); - } else { - return raw_method_is_invocable_with(vinst, {}); - } + const std::array vargs{uarg_base{std::forward(args)}...}; + return raw_method_is_invocable_with(vinst, vargs); } } @@ -6888,13 +6840,9 @@ namespace meta_hpp template < typename... Args > uvalue constructor::create(Args&&... args) const { - if constexpr ( sizeof...(Args) > 0 ) { - using namespace detail; - const std::array vargs{uarg{std::forward(args)}...}; - return state_->create(vargs); - } else { - return state_->create({}); - } + using namespace detail; + const std::array vargs{uarg{std::forward(args)}...}; + return state_->create(vargs); } template < typename... Args > @@ -6907,13 +6855,9 @@ namespace meta_hpp template < typename... Args > uvalue constructor::create_at(void* mem, Args&&... args) const { - if constexpr ( sizeof...(Args) > 0 ) { - using namespace detail; - const std::array vargs{uarg{std::forward(args)}...}; - return state_->create_at(mem, vargs); - } else { - return state_->create_at(mem, {}); - } + using namespace detail; + const std::array vargs{uarg{std::forward(args)}...}; + return state_->create_at(mem, vargs); } template < typename... Args > @@ -6926,24 +6870,16 @@ namespace meta_hpp template < typename... Args > bool constructor::is_invocable_with() const noexcept { - if constexpr ( sizeof...(Args) > 0 ) { - using namespace detail; - const std::array vargs{uarg_base{type_list{}}...}; - return state_->is_invocable_with(vargs); - } else { - return state_->is_invocable_with({}); - } + using namespace detail; + const std::array vargs{uarg_base{type_list{}}...}; + return state_->is_invocable_with(vargs); } template < typename... Args > bool constructor::is_invocable_with(Args&&... args) const noexcept { - if constexpr ( sizeof...(Args) > 0 ) { - using namespace detail; - const std::array vargs{uarg_base{std::forward(args)}...}; - return state_->is_invocable_with(vargs); - } else { - return state_->is_invocable_with({}); - } + using namespace detail; + const std::array vargs{uarg_base{std::forward(args)}...}; + return state_->is_invocable_with(vargs); } inline argument constructor::get_argument(std::size_t position) const noexcept { diff --git a/headers/meta.hpp/meta_detail/value_utilities/uarg.hpp b/headers/meta.hpp/meta_detail/value_utilities/uarg.hpp index c68a889..f800339 100644 --- a/headers/meta.hpp/meta_detail/value_utilities/uarg.hpp +++ b/headers/meta.hpp/meta_detail/value_utilities/uarg.hpp @@ -24,7 +24,7 @@ namespace meta_hpp::detail }; public: - uarg_base() = delete; + uarg_base() = default; ~uarg_base() = default; uarg_base(uarg_base&&) = default; @@ -94,7 +94,7 @@ namespace meta_hpp::detail { class uarg final : public uarg_base { public: - uarg() = delete; + uarg() = default; ~uarg() = default; uarg(uarg&&) = default; diff --git a/headers/meta.hpp/meta_detail/value_utilities/uinst.hpp b/headers/meta.hpp/meta_detail/value_utilities/uinst.hpp index 10a8b92..b802d2d 100644 --- a/headers/meta.hpp/meta_detail/value_utilities/uinst.hpp +++ b/headers/meta.hpp/meta_detail/value_utilities/uinst.hpp @@ -24,7 +24,7 @@ namespace meta_hpp::detail }; public: - uinst_base() = delete; + uinst_base() = default; ~uinst_base() = default; uinst_base(uinst_base&&) = default; @@ -99,7 +99,7 @@ namespace meta_hpp::detail { class uinst final : public uinst_base { public: - uinst() = delete; + uinst() = default; ~uinst() = default; uinst(uinst&&) = default; diff --git a/headers/meta.hpp/meta_invoke/invoke.hpp b/headers/meta.hpp/meta_invoke/invoke.hpp index 2eb035b..73b4e91 100644 --- a/headers/meta.hpp/meta_invoke/invoke.hpp +++ b/headers/meta.hpp/meta_invoke/invoke.hpp @@ -27,12 +27,8 @@ namespace meta_hpp template < detail::function_pointer_kind Function, typename... Args > uvalue invoke(Function function_ptr, Args&&... args) { using namespace detail; - if constexpr ( sizeof...(Args) > 0 ) { - const std::array vargs{uarg{std::forward(args)}...}; - return raw_function_invoke(function_ptr, vargs); - } else { - return raw_function_invoke(function_ptr, {}); - } + const std::array vargs{uarg{std::forward(args)}...}; + return raw_function_invoke(function_ptr, vargs); } } @@ -62,12 +58,8 @@ namespace meta_hpp uvalue invoke(Method method_ptr, Instance&& instance, Args&&... args) { using namespace detail; const uinst vinst{std::forward(instance)}; - if constexpr ( sizeof...(Args) > 0 ) { - const std::array vargs{uarg{std::forward(args)}...}; - return raw_method_invoke(method_ptr, vinst, vargs); - } else { - return raw_method_invoke(method_ptr, vinst, {}); - } + const std::array vargs{uarg{std::forward(args)}...}; + return raw_method_invoke(method_ptr, vinst, vargs); } } @@ -85,24 +77,16 @@ namespace meta_hpp template < detail::function_pointer_kind Function, typename... Args > bool is_invocable_with() { - if constexpr ( sizeof...(Args) > 0 ) { - using namespace detail; - const std::array vargs{uarg_base{type_list{}}...}; - return raw_function_is_invocable_with(vargs); - } else { - return raw_function_is_invocable_with({}); - } + using namespace detail; + const std::array vargs{uarg_base{type_list{}}...}; + return raw_function_is_invocable_with(vargs); } template < detail::function_pointer_kind Function, typename... Args > bool is_invocable_with(Args&&... args) { - if constexpr ( sizeof...(Args) > 0 ) { - using namespace detail; - const std::array vargs{uarg_base{std::forward(args)}...}; - return raw_function_is_invocable_with(vargs); - } else { - return raw_function_is_invocable_with({}); - } + using namespace detail; + const std::array vargs{uarg_base{std::forward(args)}...}; + return raw_function_is_invocable_with(vargs); } } @@ -149,23 +133,15 @@ namespace meta_hpp bool is_invocable_with() { using namespace detail; const uinst_base vinst{type_list{}}; - if constexpr ( sizeof...(Args) > 0 ) { - const std::array vargs{uarg_base{type_list{}}...}; - return raw_method_is_invocable_with(vinst, vargs); - } else { - return raw_method_is_invocable_with(vinst, {}); - } + const std::array vargs{uarg_base{type_list{}}...}; + return raw_method_is_invocable_with(vinst, vargs); } template < detail::method_pointer_kind Method, typename Instance, typename... Args > bool is_invocable_with(Instance&& instance, Args&&... args) { using namespace detail; const uinst_base vinst{std::forward(instance)}; - if constexpr ( sizeof...(Args) > 0 ) { - const std::array vargs{uarg_base{std::forward(args)}...}; - return raw_method_is_invocable_with(vinst, vargs); - } else { - return raw_method_is_invocable_with(vinst, {}); - } + const std::array vargs{uarg_base{std::forward(args)}...}; + return raw_method_is_invocable_with(vinst, vargs); } } diff --git a/headers/meta.hpp/meta_states/constructor.hpp b/headers/meta.hpp/meta_states/constructor.hpp index 856c48b..113dfc2 100644 --- a/headers/meta.hpp/meta_states/constructor.hpp +++ b/headers/meta.hpp/meta_states/constructor.hpp @@ -165,13 +165,9 @@ namespace meta_hpp template < typename... Args > uvalue constructor::create(Args&&... args) const { - if constexpr ( sizeof...(Args) > 0 ) { - using namespace detail; - const std::array vargs{uarg{std::forward(args)}...}; - return state_->create(vargs); - } else { - return state_->create({}); - } + using namespace detail; + const std::array vargs{uarg{std::forward(args)}...}; + return state_->create(vargs); } template < typename... Args > @@ -184,13 +180,9 @@ namespace meta_hpp template < typename... Args > uvalue constructor::create_at(void* mem, Args&&... args) const { - if constexpr ( sizeof...(Args) > 0 ) { - using namespace detail; - const std::array vargs{uarg{std::forward(args)}...}; - return state_->create_at(mem, vargs); - } else { - return state_->create_at(mem, {}); - } + using namespace detail; + const std::array vargs{uarg{std::forward(args)}...}; + return state_->create_at(mem, vargs); } template < typename... Args > @@ -203,24 +195,16 @@ namespace meta_hpp template < typename... Args > bool constructor::is_invocable_with() const noexcept { - if constexpr ( sizeof...(Args) > 0 ) { - using namespace detail; - const std::array vargs{uarg_base{type_list{}}...}; - return state_->is_invocable_with(vargs); - } else { - return state_->is_invocable_with({}); - } + using namespace detail; + const std::array vargs{uarg_base{type_list{}}...}; + return state_->is_invocable_with(vargs); } template < typename... Args > bool constructor::is_invocable_with(Args&&... args) const noexcept { - if constexpr ( sizeof...(Args) > 0 ) { - using namespace detail; - const std::array vargs{uarg_base{std::forward(args)}...}; - return state_->is_invocable_with(vargs); - } else { - return state_->is_invocable_with({}); - } + using namespace detail; + const std::array vargs{uarg_base{std::forward(args)}...}; + return state_->is_invocable_with(vargs); } inline argument constructor::get_argument(std::size_t position) const noexcept { diff --git a/headers/meta.hpp/meta_states/function.hpp b/headers/meta.hpp/meta_states/function.hpp index 59cd7fc..a75529b 100644 --- a/headers/meta.hpp/meta_states/function.hpp +++ b/headers/meta.hpp/meta_states/function.hpp @@ -144,13 +144,9 @@ namespace meta_hpp template < typename... Args > uvalue function::invoke(Args&&... args) const { - if constexpr ( sizeof...(Args) > 0 ) { - using namespace detail; - const std::array vargs{uarg{std::forward(args)}...}; - return state_->invoke(vargs); - } else { - return state_->invoke({}); - } + using namespace detail; + const std::array vargs{uarg{std::forward(args)}...}; + return state_->invoke(vargs); } template < typename... Args > @@ -168,24 +164,16 @@ namespace meta_hpp template < typename... Args > bool function::is_invocable_with() const noexcept { - if constexpr ( sizeof...(Args) > 0 ) { - using namespace detail; - const std::array vargs{uarg_base{type_list{}}...}; - return state_->is_invocable_with(vargs); - } else { - return state_->is_invocable_with({}); - } + using namespace detail; + const std::array vargs{uarg_base{type_list{}}...}; + return state_->is_invocable_with(vargs); } template < typename... Args > bool function::is_invocable_with(Args&&... args) const noexcept { - if constexpr ( sizeof...(Args) > 0 ) { - using namespace detail; - const std::array vargs{uarg_base{std::forward(args)}...}; - return state_->is_invocable_with(vargs); - } else { - return state_->is_invocable_with({}); - } + using namespace detail; + const std::array vargs{uarg_base{std::forward(args)}...}; + return state_->is_invocable_with(vargs); } inline argument function::get_argument(std::size_t position) const noexcept { diff --git a/headers/meta.hpp/meta_states/method.hpp b/headers/meta.hpp/meta_states/method.hpp index 94fa64c..12f0630 100644 --- a/headers/meta.hpp/meta_states/method.hpp +++ b/headers/meta.hpp/meta_states/method.hpp @@ -160,12 +160,8 @@ namespace meta_hpp uvalue method::invoke(Instance&& instance, Args&&... args) const { using namespace detail; const uinst vinst{std::forward(instance)}; - if constexpr ( sizeof...(Args) > 0 ) { - const std::array vargs{uarg{std::forward(args)}...}; - return state_->invoke(vinst, vargs); - } else { - return state_->invoke(vinst, {}); - } + const std::array vargs{uarg{std::forward(args)}...}; + return state_->invoke(vinst, vargs); } template < typename Instance, typename... Args > @@ -185,24 +181,16 @@ namespace meta_hpp bool method::is_invocable_with() const noexcept { using namespace detail; const uinst_base vinst{type_list{}}; - if constexpr ( sizeof...(Args) > 0 ) { - const std::array vargs{uarg_base{type_list{}}...}; - return state_->is_invocable_with(vinst, vargs); - } else { - return state_->is_invocable_with(vinst, {}); - } + const std::array vargs{uarg_base{type_list{}}...}; + return state_->is_invocable_with(vinst, vargs); } template < typename Instance, typename... Args > bool method::is_invocable_with(Instance&& instance, Args&&... args) const noexcept { using namespace detail; const uinst_base vinst{std::forward(instance)}; - if constexpr ( sizeof...(Args) > 0 ) { - const std::array vargs{uarg_base{std::forward(args)}...}; - return state_->is_invocable_with(vinst, vargs); - } else { - return state_->is_invocable_with(vinst, {}); - } + const std::array vargs{uarg_base{std::forward(args)}...}; + return state_->is_invocable_with(vinst, vargs); } inline argument method::get_argument(std::size_t position) const noexcept {