Bonjour à tous,
Dans le cadre de mon projet, je souhaite pouvoir identifier certaines classes avec des ID uniques déterminés à la compilation, statiques à classe considérée et surtout non modifiables.
Jusque là, je m'en sort bien. J'ai une fonction de hachage qui me permet, via une macro, de réaliser ce que je souhaite :
#define SIGNATURE_TAG(val) static constexpr std::size_t signature = strhash(#val)Par contre, là où ça se corse, c'est que ces différentes classes doivent hériter d'un parent permettant d'accéder à ces valeurs. Si je reprends la macro ci-dessus, j'ai :
si je renseigne une variable "signature" dans A, alors j'ai un conflit, mais si je ne le renseigne pas, je ne peux donc pas accéder aux valeurs nécessaires pour le bon déroulement de mon programme...
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 #define SIGNATURE_TAG(val) static constexpr std::size_t signature = strhash(#val) struct A { /* que faire ici pour pouvoir accéder à "signature" */ //[...] }; struct B: A { SIGNATURE_TAG("premier hash"); }; struct C: A { SIGNATURE_TAG("second hash"); }; int main() { std::vector<A> vals; vals.push_back(B); vals.push_back(B); vals.push_back(C); for(auto a:vals_) { std::cout << a::signature << std::endl; } return 0; }
Autre bug que je retrouve, en parallèle, c'est lors du passage d'une des structures (B, ou C) via référence ou pointeurs à une fonction, je ne récupère pas les mêmes valeurs. Ceci me surprends beaucoup, aussi je pense que cette dernière problématique est en partie liée à la première.
Une idée ?
Merci d'avance.
Partager