Hachage de chaîne au moment de la compilation
Question : Est-il possible de calculer le hachage d'une chaîne au moment de la compilation à l'aide de C 11 de nouveaux littéraux de chaîne ?
Réponse : Oui, c'est possible.
L'opérateur auquel cela ressemblerait n'a pas encore été standardisé, mais il pourrait ressembler à std::hash(value) ou meta_hash<"string"_meta>::value.
Implémentation :
Une implémentation récente a été développée pour GCC en utilisant constexpr pour créer un fonction CRC32 au moment de la compilation. Cette implémentation implique la création d'une table CRC32 et l'utilisation d'une fonction de modèle récursive pour calculer le hachage.
Exemple :
// CRC32 Table (zlib polynomial) static constexpr uint32_t crc_table[256] = { // ... }; template<size_t idx> constexpr uint32_t crc32(const char * str) { // ... } // ... #define COMPILE_TIME_CRC32_STR(x) (crc32<sizeof(x) - 2>(x) ^ 0xFFFFFFFF)
En utilisant cette macro, vous pouvez calculer une compilation -time CRC32 hachage d'une chaîne :
enum TestEnum { CrcVal01 = COMPILE_TIME_CRC32_STR("stack-overflow"), };
Remarque : Cette implémentation ne fonctionne qu'avec les compilateurs GCC et non MSVC ou Intel.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!