Bonjour à toutes et à tous,
J'essaie de décomposer une classes en politiques, et comme c'est la première fois que j'ai plus d'une politique à gérer, je ne sais pas bien m'y prendre. Ou disons plutôt que j'ai l'impression de vouloir faire très compliqué pour les cas les plus simples. Pourriez-vous m'aiguiller je vous prie ?
Par défaut, j'aimerais que le Prédicat unaire retourne true quelque soit la valeur de l'argument fourni. Est-ce qu'il faut que je code un foncteur bidon qui renvoie toujours true pour pouvoir le mettre en argument template par défaut ou il y a un truc du genre std::true<T>, ou bien tout simplement le type true fera l'affaire ? Est-ce que le compilateur va faire sauter le test conditionnel (je sens qu'on va me dire qu'il fera ce qu'il voudra ... ) ?
D'autre part, pour le SpectrumHandler par défaut, j'aimerais que la fonction SpectrumHandler::handle(bar_type) de la politique par défaut renvoie directement le bar qui a été passé en argument (en gros, qu'elle ne fasse rien de particulier). Est ce qu'il faut que j'implémente une politique bidon qui retourne directement l'argument, où il y a t'il une manière plus explicite/concise de faire (une sorte de std::return_directly<T>) ?
Merci d'avance
EDIT : Des erreurs de compilation se sont glissées dans les lignes de code et sont corrigées par Pyramidev plus bas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 template<class UnaryPredicate, class SpectrumHandler> class OccupancySpectrumDistribution { using spectrum_type = Algorithm::occupancy_spectrum_type; using support_type = std::vector<spectrum_type>; using probabilities_type = std::vector<double>; support_type m_support; probabilities_type m_probas; mutable std::discrete_distribution<size_t> m_dist; static auto make_callback(unsigned int k, unsigned int N, UnaryPredicate pred){ auto& s_ref = m_support; auto& p_ref = m_probas; return [s_ref, p_ref](spectrum_type const& M_j){ auto p = compute_probability(k, N, M_j); if(pred(p)){ s_ref.push_back(SpectrumHandler::handle(M_j)); p_ref.push_back(p); } }; } // .... };
Partager