Bonjour, je bosse sur de l'algorithmie et je suis confronter � un probl�me de conception et d�optimisation.
Comment faire pour choisir une fonction en param�tre de mani�re efficace ?
En gros je veux un truc du genre :
L'utilisateur de la lib d�finie :
Et dans le constructeur de Algo, un truc du genre:
Code : S�lectionner tout - Visualiser dans une fen�tre � part Algo *test = new algo(cosinus); // le cosinus provenant d'une enum
Cela fonctionne tr�s bien mais j'aimerais externaliser mes fonctions dans un autre ficher pour des raison de lisibilit�. Dois-je faire une class static avec pour stocker mes fonctions ? Du coup, plus besoin de lambda ? Ou alors est-il plus propre de faire une class d�riv� d'Algo pour chaque fonction ? Sinon je peux faire une structure contenant un pointer vers la fonction mais cela est trop car en r�alit� il s'agit de r�seaux de neurones et je ne peux pas cr�er un pointer vers une fonction par neurones, cela serait trop lourd et ferait trop de r�p�tission, non ? D'ailleurs, les lambda/pointers de fonction sont-ils stocker dans le tas ou la pile ?
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 enum functionEnum { cosinus, sinus, tangent }; class Algo { public : Algo(functionEnum e) { if(e == cosinus) func = [](float x) { return cos(x); }; else if(e == sinus) func = [](float x) { return sin(x); }; else if(e == tangent) func = [](float x) { return tan(x); }; } private : float func; }
Bien �videmment cela doit rester le plus optimiser possible car les fonctions sont appel� plusieurs 100�ne de milliers de fois pas seconde.
PS : Les cos, sin et tan ne sont ici que pour l'exemple, mes fonctions sont en r�alit� un peu plus complexes et plus nombreuses que cela et c'est aussi pour cela que je ne peux pas directement mettre mes fonctions dans ma classe Algo.
D'ailleurs il ne s'agit pas juste d'une fonction mais d'un couple de fonction : la fonction et sa d�riv�e associ�.
Merci d'avance pour votre aide![]()
Partager