/* * File: BaseProcessorTaskPolicy.h * Author: winckler * * Created on October 14, 2015, 1:01 PM */ #ifndef BASEPROCESSORTASKPOLICY_H #define BASEPROCESSORTASKPOLICY_H #include // CRTP base class template class BaseProcessorTaskPolicy { public: BaseProcessorTaskPolicy() {} virtual ~BaseProcessorTaskPolicy() {} template auto GetOutputData() -> decltype(static_cast(this)->GetOutputData()) { static_assert(std::is_same{}, "BaseProcessorTaskPolicy::GetOutputData hack broken"); return static_cast(this)->GetOutputData(); } template auto ExecuteTask(CONTAINER_TYPE container) -> decltype( static_cast(this)->ExecuteTask(container)) { static_assert(std::is_same{}, "BaseProcessorTaskPolicy::ExecuteTask hack broken"); return static_cast(this)->ExecuteTask(container); } }; /* // c++14 code only // CRTP base class template class BaseProcessorTaskPolicy { public: BaseProcessorTaskPolicy() {} virtual ~BaseProcessorTaskPolicy() {} auto GetOutputData() { return static_cast(this)->GetOutputData(); } template auto ExecuteTask(CONTAINER_TYPE container) { return static_cast(this)->ExecuteTask(container); } }; */ #endif /* BASEPROCESSORTASKPOLICY_H */