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