From e534369dae7ac5ddd98ddb3efbf02efd65b518c0 Mon Sep 17 00:00:00 2001 From: zzyyyl Date: Sun, 31 Jul 2022 19:20:13 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=94=A8=20concepts=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=20static=5Fassert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MeoAssistant/AbstractTask.h | 4 +--- src/MeoAssistant/Assistant.cpp | 2 +- src/MeoAssistant/TaskData.h | 11 ++--------- 3 files changed, 4 insertions(+), 13 deletions(-) diff --git a/src/MeoAssistant/AbstractTask.h b/src/MeoAssistant/AbstractTask.h index 8e596ccdce..e09d2a5253 100644 --- a/src/MeoAssistant/AbstractTask.h +++ b/src/MeoAssistant/AbstractTask.h @@ -41,10 +41,8 @@ namespace asst template std::shared_ptr register_plugin() + requires(std::is_base_of_v) // Plugin must inherit AbstractTaskPlugin { - static_assert(std::is_base_of_v, - "Plugin must inherit AbstractTaskPlugin"); - auto plugin = std::make_shared(m_callback, m_callback_arg, m_task_chain); m_plugins.emplace(plugin); return plugin; diff --git a/src/MeoAssistant/Assistant.cpp b/src/MeoAssistant/Assistant.cpp index a721335a64..9c692a784b 100644 --- a/src/MeoAssistant/Assistant.cpp +++ b/src/MeoAssistant/Assistant.cpp @@ -232,7 +232,7 @@ void Assistant::working_proc() std::unique_lock lock(m_mutex); if (!m_thread_idle && !m_tasks_list.empty()) { - const auto [id, task_ptr] = m_tasks_list.front(); + const auto& [id, task_ptr] = m_tasks_list.front(); lock.unlock(); json::value callback_json = json::object{ diff --git a/src/MeoAssistant/TaskData.h b/src/MeoAssistant/TaskData.h index 1732ae3196..c9a42b4282 100644 --- a/src/MeoAssistant/TaskData.h +++ b/src/MeoAssistant/TaskData.h @@ -26,6 +26,7 @@ namespace asst const std::unordered_set& get_templ_required() const noexcept; template + requires(std::is_base_of_v) // Parameter must be a TaskInfo std::shared_ptr get(const std::string& name) { auto it = m_all_tasks_info.find(name); @@ -33,15 +34,7 @@ namespace asst return nullptr; } - if constexpr (std::is_same_v) { - return it->second; - } - else if constexpr (std::is_base_of_v) { - return std::dynamic_pointer_cast(it->second); - } - else { - static_assert(!sizeof(TargetTaskInfoType), "Parameter must be a TaskInfo"); - } + return std::dynamic_pointer_cast(it->second); } protected: