Je dois utiliser une chaîne comme ID pour obtenir un objet. Pour mettre en œuvre cela dans un temps d'exécution et fonctionne bien. Mais cela rend le type statique à la vérification impossible, pour des raisons évidentes.
J'ai googlé pour l'algorithme de calcul de la somme Hash-Somme de la chaîne dans la compilation: CLASH STRONT DE TIME CI ++ avec BOOST.MPL . P>
Il semble que cela semble Soyez la solution parfaite à mon problème, sauf que la sring nécessaire à l'algorithme doit être divisée en morceaux de 4 caractères, ou de caractère par caractère, pour des raisons évidentes. P>
IE, Au lieu de l'enregistrement actuel habituel de l'ID's, je devrai écrire de cette façon: p> ceci est absolument inutilisable. P> La question est, Comment passer correctement la chaîne telle que merci à tous. p> p> "objet.method" code> sur cet algorithme? p>
4 Réponses :
Je ne sais pas d'une façon de le faire avec le pré-processeur ou avec des modèles. Je soupçonne que votre meilleur pari est de créer une étape de pré-compilation séparée (par exemple avec Perl ou telle) pour générer les instructions HASH_CSTRING CODE> d'un ensemble d'instructions Source. Ensuite, au moins vous n'avez pas besoin de fractionner les cordes manuellement lorsque vous en ajoutez de nouveaux, et la génération est entièrement automatisée et répétable. P>
Les modèles peuvent être instanciés avec n'importe quel symbole externe, cela devrait donc fonctionner comme prévu: (étant donné le modèle hash_cstring <> code> est capable de traiter avec le pointeur valeurs). P> p>
solution avec GCC-4.6: http://liveworkspace.org / Code / dpobf P> I`M Happy! P> P>
Vous obtenez-vous réellement cela pour compiler avec GCC 4.6 sans erreur de récursivité?
Drôle, mon GCC-4.6.1 (Mingw-TDM) rejette ce code avec ladite erreur (est la raison pour laquelle j'ai demandé).
Dans l'instanciation de 'statique consexprzeprze_t_t hash_calc
Je ne suis pas sûr de la construction de TDM. J'utilise ces bâtiments: code.google.com/p/mingw-builds
Si quiconque est intéressé, je traverse comment créer un hachage de temps de compilation de Murmur3_32 à l'aide de fonctions ConstExpr et de modèles variadiques ConstExPR ici: P>
http: //roarttinon.blogspot. SG / 2014/10 / compile-time-murmur-hash-in-c.html p>
La plupart des exemples que j'ai vus faire face aux hachages qui sont basés sur la consommation d'un caractère de la chaîne à la fois. Le hachage murmur3_32 est un peu plus intéressant en ce sens qu'il consomme 4 caractères à la fois et nécessite un code de cas spécial pour gérer les 0, 1, 2 ou 3 octets restants. P>
Pouvez-vous utiliser la structure avec une chaîne statique au lieu de chaîne directement? Peut-être une macro pour les générer aussi?
@AAA: Les macros ne divisent pas les jetons, ils peuvent les régler ou les concaténer, mais pas les diviser.
@Matt Macros pour générer des struct avec nom et chaîne statique. par exemple
#define str (n) struct n {...} code>
Toute pensée d'utilisation de GPERF et d'envelopper les résultats avec un type?