Bonjour à toutes et tous,
je me pose une question existentielle sur la meilleure façon de mutualiser le code d'un algo selon qu'il soit "templetisé" ou non.
J'ai une fonction qui code un algo assez compliqué et consommateur de CPU.
Il peut être bien optimisé par le compilateur si certains de ses paramètres sont des puissances de 2 connues à l'avance.
Or, dans 99% des cas, les paramètres en question sont justement des puissances de 2 connues à l'avance.
J'ai donc une implémentation sous forme template qui permet au compilateur d'optimiser un max.
Et une version "générique" avec des paramètres quelconques, pour les rares cas où les paramètres n'ont pas des valeurs "classiques".
Voici un exemple (ou mon algo compliqué a été remplacé par une simple division) :
Ma question :
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 template<int N> int algo_template ( int x ) { return x/N ; // ici un algo super compliqué que le compilateur peut optimiser si N est une puissance de 2 constante } int algo_non_template ( int x , int N ) { return x/N ; // le même algo qui ne sera pas optimisé par le compilateur (mais qui sert rarement) } int algo ( int x , int n ) // on sait que n vaut très souvent 16 ou 32 { switch ( n ) { case 16 : return algo_template<16>( x ) ; case 32 : return algo_template<32>( x ) ; default : return algo_non_template( x,n ) ; // ne se produit que très rarement } }
Y a-t-il un moyen élégant et cplusplussien de n'avoir qu'un seul exemplaire du code de l'algo (qui est beaucoup plus gros que l'exemple en une ligne donné ici) ?
Merci d'avance !
Partager