// 2020/08/28 - Created by netcan: https://github.com/netcan #pragma once #include "../core/flow_builder.hpp" #include "../core/task.hpp" #include "type_list.hpp" #include namespace tf { namespace dsl { struct TaskSignature {}; template struct TaskCb { using TaskType = TASK; void build(FlowBuilder &build, const CONTEXT &context) { task_ = build.emplace(TaskType{context}()); } Task task_; }; template struct IsTask { template struct apply { constexpr static bool value = std::is_same::value; }; }; template struct TaskTrait; template struct SomeTask { using TaskList = Unique_t::TaskList...>>>; }; // a task self template struct TaskTrait< TASK, std::enable_if_t::value>> { using TaskList = TypeList; }; template struct TaskTrait> { using TaskList = typename SomeTask::TaskList; }; } // namespace dsl } // namespace tf