Browse Source

meta: avoid moving meta handles again and again (perf)

skypjack 6 months ago
parent
commit
33efea3f03
1 changed files with 1 additions and 1 deletions
  1. 1 1
      src/entt/meta/meta.hpp

+ 1 - 1
src/entt/meta/meta.hpp

@@ -1035,7 +1035,7 @@ public:
     template<typename... Args>
     template<typename... Args>
     // NOLINTNEXTLINE(modernize-use-nodiscard)
     // NOLINTNEXTLINE(modernize-use-nodiscard)
     meta_any invoke(meta_handle instance, Args &&...args) const {
     meta_any invoke(meta_handle instance, Args &&...args) const {
-        return invoke(std::move(instance), std::array<meta_any, sizeof...(Args)>{meta_any{*ctx, std::forward<Args>(args)}...}.data(), sizeof...(Args));
+        return (sizeof...(Args) == arity()) ? node_or_assert().invoke(meta_handle{*ctx, std::move(instance)}, std::array<meta_any, sizeof...(Args)>{meta_any{*ctx, std::forward<Args>(args)}...}.data()) : meta_any{meta_ctx_arg, *ctx};
     }
     }
 
 
     /*! @copydoc meta_data::traits */
     /*! @copydoc meta_data::traits */