Hello !

Une classe me pose quelques problèmes de duplication de code: la logique et la même dans les deux versions de fonctions mais a cause d'arguments supplémentaires je n'arrive pas a abstraire. Je connais un peut les variadic template, mais la je sèche ! Peut-être pourriez-vous m'aider a factoriser ?

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
27
28
  template<typename Generator, typename Tree>
  forest_type<Tree> coalescence_process(forest_type<Tree> forest, history_type const& history, Generator& gen)
  {
    auto t = history.last_time();
    while( (forest.nb_trees() > 1) && (t > history.first_time()) )
    {
      coalesce(forest, t, gen); // <---- attention ca va changer dans la seconde version
      simulate_backward_migration(forest, t, gen);
      --t;
    }
    coalesce(forest, t, gen); // <---- attention ca va changer dans la seconde version
    return forest;
  }
 
  template<typename Generator, typename F, typename Tree>
  forest_type<Tree> coalescence_process(forest_type<Tree> forest, history_type const& history, F binary_op, Generator& gen)
  {
    auto t = history.last_time();
 
    while( (forest.nb_trees() > 1) && (t > history.first_time()) )
    {
      coalesce(forest, t, binary_op, gen);  // <----et voila, un petit opérateur qui met le bazar
      simulate_backward_migration(forest, t, gen);
      --t;
    }
    coalesce(forest, t, binary_op, gen); // <----et voila, un petit opérateur qui met le bazar
    return forest;
  }
En vous remerciant,