コンパイル時の文字列ハッシュ
質問: C 11 を使用してコンパイル時に文字列のハッシュを計算することは可能ですか?新しい文字列リテラル?
答え: はい、可能です。
次のような演算子はまだ標準化されていませんが、std::hash(value に似ている可能性があります) ) またはmeta_hash<"string"_meta>::value.
実装:
最近の実装は、constexpr を使用してコンパイル時 CRC32 関数を作成する GCC 用に開発されました。この実装には、CRC32 テーブルの作成と再帰テンプレート関数の使用によるハッシュの計算が含まれます。
例:
// 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)
このマクロを使用すると、コンパイルを計算できます。 -time CRC32 ハッシュ文字列:
enum TestEnum { CrcVal01 = COMPILE_TIME_CRC32_STR("stack-overflow"), };
注: この実装は GCC でのみ動作し、MSVC や Intel コンパイラでは動作しません。
以上がC 11 コンパイル時の文字列ハッシュは実現できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。