Arguments variable et factorisation
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:
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,