Просмотр исходного кода

process: refine basic_process_adaptor implementation to use deduction guides

skypjack 8 месяцев назад
Родитель
Сommit
ba20bde250
2 измененных файлов с 17 добавлено и 11 удалено
  1. 11 5
      src/entt/process/process.hpp
  2. 6 6
      test/entt/process/process.cpp

+ 11 - 5
src/entt/process/process.hpp

@@ -5,6 +5,7 @@
 #include <memory>
 #include <type_traits>
 #include <utility>
+#include "../core/type_traits.hpp"
 #include "fwd.hpp"
 
 namespace entt {
@@ -286,13 +287,11 @@ struct basic_process_adaptor: public basic_process<Delta> {
 
     /**
      * @brief Constructs a process adaptor from a lambda or a functor.
-     * @tparam Args Types of arguments to use to initialize the actual process.
-     * @param args Parameters to use to initialize the actual process.
+     * @param proc Actual process to use under the hood.
      */
-    template<typename... Args>
-    basic_process_adaptor(Args &&...args)
+    basic_process_adaptor(Func proc)
         : basic_process<Delta>{},
-          func{std::forward<Args>(args)...} {}
+          func{std::move(proc)} {}
 
     /**
      * @brief Updates a process and its internal state if required.
@@ -307,6 +306,13 @@ private:
     Func func;
 };
 
+/**
+ * @brief Deduction guide.
+ * @tparam Func Actual type of process.
+ */
+template<typename Func>
+basic_process_adaptor(Func) -> basic_process_adaptor<nth_argument_t<0u, Func>, Func>;
+
 } // namespace entt
 
 #endif

+ 6 - 6
test/entt/process/process.cpp

@@ -201,13 +201,13 @@ TEST(Process, ThenPeek) {
 
 TEST(ProcessAdaptor, Resolved) {
     bool updated = false;
-    auto lambda = [&updated](std::uint32_t, void *, auto &proc) {
+    auto lambda = [&updated](std::uint32_t, void *, entt::process &proc) {
         ASSERT_FALSE(updated);
         updated = true;
         proc.succeed();
     };
 
-    entt::process_adaptor<decltype(lambda)> process{lambda};
+    entt::basic_process_adaptor process{lambda};
 
     process.tick(0u);
     process.tick(0u);
@@ -218,13 +218,13 @@ TEST(ProcessAdaptor, Resolved) {
 
 TEST(ProcessAdaptor, Rejected) {
     bool updated = false;
-    auto lambda = [&updated](std::uint32_t, void *, auto &proc) {
+    auto lambda = [&updated](std::uint32_t, void *, entt::process &proc) {
         ASSERT_FALSE(updated);
         updated = true;
         proc.fail();
     };
 
-    entt::process_adaptor<decltype(lambda)> process{lambda};
+    entt::basic_process_adaptor process{lambda};
 
     process.tick(0u);
     process.tick(0u);
@@ -235,12 +235,12 @@ TEST(ProcessAdaptor, Rejected) {
 
 TEST(ProcessAdaptor, Data) {
     int value = 0;
-    auto lambda = [](std::uint32_t, void *data, auto &proc) {
+    auto lambda = [](std::uint32_t, void *data, entt::process &proc) {
         *static_cast<int *>(data) = 2;
         proc.succeed();
     };
 
-    entt::process_adaptor<decltype(lambda)> process{lambda};
+    entt::basic_process_adaptor process{lambda};
 
     process.tick(0u, &value);