Bonjour,
Je souhaiterai créer une fonction afin de générer des noms uniques de vector persistent.
Ces vectors seront éffacés via une autre fonction.
Chaque appel de la fonction doit créer un nom unique de vector.
Cet appel doit pas être écrasé par l'appel suivant.
Exemple :
Appel 1 :
+ Création d'un vector Liste_0 et de son contenu
Appel 2 :
+ Création d'un vector Liste_1 et de son contenu
Appel ... :
Le problème c'est que le nom des variables en C++ est statique et que chaque variable doit être déclarée avec un nom défini d'avance.
Peut-on crééer une fonction génératrice de nom unique aux vector C++ ?
Sur d'autres languages cela se fait !
Sur la base d'un code d'exemple ci dessous, j'ai ténté sur un autre code, de créeer un nom unique via une macro pour un vector.
J'ai bien le vector sans erreur, mais je n'arrive pas à exploiter.
Code vector persistent classique
Tentative de création d'un nom unique avec une macro
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 #include <iostream> #include <fstream> #include <string> #include <vector> #include <utility> using std::cout; using std::end; using std::string; using std::atoi; using std::to_string; using std::vector; using std::pair; using std::make_pair; using std::sort; int main(){ int64_t I64_V1D_Taille{}; static vector<int64_t>Liste{}; I64_V1D_Taille = Liste.size(); cout << I64_V1D_Taille << end; Liste.clear(); }
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 <iostream> #include <fstream> #include <string> #include <vector> #include <utility> using std::cout; using std::end; using std::string; using std::atoi; using std::to_string; using std::vector; using std::pair; using std::make_pair; using std::sort; #define CONCAT(a, b) CONCAT_INNER(a, b) #define CONCAT_INNER(a, b) a ## b #define UNIQUE_NAME(base) CONCAT(base, __COUNTER__) int main(){ int64_t I64_V1D_Taille{}; static vector<int64_t>UNIQUE_NAME(Liste){};//fonctionne /*I64_V1D_Taille = UNIQUE_NAME(Liste).size(); //error C2065: 'Liste3': undeclared identifier*/ //cout << I64_V1D_Taille << end; }
Partager