membre constexpr et héritage
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 :
Code:
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;
} |
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...
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.