#ifndef CATEGORY_HPP #define CATEGORY_HPP #include "Criterion.hpp" #include "VoteScheme.hpp" #include #include namespace People { template concept CatEnum = std::is_enum_v && ( std::is_same_v || std::is_same_v || std::is_same_v || std::is_same_v || std::is_same_v || std::is_same_v ); template class Category { private: static_assert(sizeof...(Crits) > 0, "At least one criterion"); std::tuple criteria; std::size_t pop; VoteScheme voteScheme; template bool hasCriterionImpl(C val) const { if constexpr (I < sizeof...(Crits)) { using ElemType = std::tuple_element_t>; if constexpr (std::is_same_v) { if (std::get(criteria) == val) return true; } return hasCriterionImpl(val); } return false; } public: // Constructeur : reçoit les valeurs brutes des enums Category(Crits... values, size_t p): criteria(values...), pop(p){} std::size_t getPop() const {return pop;} template bool hasCriterion(C val) const { return hasCriterionImpl(val); } VoteScheme& getVoteScheme() {return voteScheme;} }; } #endif