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);
        }
      };
    }
 
// .... 
};