Bonjour,
J'ai eu du mal à trouver un titre qui soit clair, toute proposition est bienvenue.
J'ai une procédure qui doit remplir un objet plusieurs fois de la même façon avec seulement quelques paramètres variables. Pour cela j'ai créé une lambda car ça me semblait bien de rester dans la portée de ma procédure. J'ai ensuite réalisé qu'un des paramètres n'avait toujours que 2 valeurs possibles, et qu'il est assez long à écrire (enum avec namespace) et que j'aimerais bien avoir un "raccourci" pour ces deux appels possibles à ma lambda. J'ai donc créé deux autres lambdas nommées plus explicitement et qui passe chacune une valeur possible. Elles prennent donc 1 paramètre de moins et le code est plus épuré.
Voici un exemple minimaliste :
Dans l'exemple ça n'a pas trop de sens, mais dans mon code la procédure pour créer un truc est plus longue et prend plus de paramètres, l'argument que je "raccourcis" est également bien plus verbeux qu'un simple int argA.
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
29
30
31
32
33
34 #include <vector> class Truc { public: int a; int b; }; int main(int argc, char *argv[]) { auto emplir = [] (int argA, int argB) { Truc truc; truc.a = argA; truc.b = argB; return truc; }; auto emplir1 = [emplir] (int argB) { return emplir(1, argB); }; auto emplir2 = [emplir] (int argB) { return emplir(2, argB); }; std::vector<Truc> trucs; trucs.push_back(emplir1(10)); // au lieu de emplir(1, 10) trucs.push_back(emplir2(20)); return 0; }
Ma question : y a-t-il une façon plus simple/propre de créer ce genre de raccourci (un genre d'alias qui passerait en dur le 1er argument) que par des lambdas ? J'ai écarté les macros car il me semble que garder ces fonctions dans la portée locale évite le risque de conflits dans le reste du projet, mais c'est peut être une erreur ?
Partager