/* * File: BaseSourcePolicy.h * Author: winckler * * Created on October 14, 2015, 1:01 PM */ #ifndef BASESOURCEPOLICY_H #define BASESOURCEPOLICY_H #include // c++11 code // CRTP base class template class BaseSourcePolicy { public: BaseSourcePolicy() {} virtual ~BaseSourcePolicy() {} template auto InitSource()-> decltype(static_cast(this)->InitSource() ) { static_assert(std::is_same{}, "BaseSourcePolicy::InitSource hack broken"); return static_cast(this)->InitSource(); } template int64_t GetNumberOfEvent()//-> decltype(static_cast(this)->GetNumberOfEvent() ) { static_assert(std::is_same{}, "BaseSourcePolicy::GetNumberOfEvent hack broken"); return static_cast(this)->GetNumberOfEvent(); } template auto SetIndex(int64_t eventIdx)-> decltype(static_cast(this)->SetIndex(eventIdx) ) { static_assert(std::is_same{}, "BaseSourcePolicy::SetIndex hack broken"); return static_cast(this)->SetIndex(eventIdx); } template //auto GetOutData()-> decltype(static_cast(this)->GetOutData() ) decltype(std::declval()->GetOutData() ) GetOutData() { static_assert(std::is_same{}, "BaseSourcePolicy::GetOutData hack broken"); return static_cast(this)->GetOutData(); } }; /* // c++14 code // CRTP base class template class BaseSourcePolicy { public: BaseSourcePolicy() {} virtual ~BaseSourcePolicy() {} auto InitSource() { return static_cast(this)->InitSource(); } int64_t GetNumberOfEvent() { return static_cast(this)->GetNumberOfEvent(); } auto SetIndex(int64_t eventIdx) { return static_cast(this)->SetIndex(int64_t eventIdx); } auto GetOutData() { return static_cast(this)->GetOutData(); } }; */ #endif /* BASESOURCEPOLICY_H */