私は現在、特定の文字列をそれらの文字列のハッシュで置き換える必要があるコードプロジェクトに取り組んでいます。これらの文字列が実行時に変更されないのを見ると、コンパイル時にハッシュされると宣言した各文字列に対して、cプリプロセッサにハッシュ関数を実行させることが効率的です。コンパイル中にCプリプロセッサにコードを実行させるにはどうすればいいですか?
Cプリプロセッサにコンパイル時にハッシュ関数を実行させる方法はありますか?
私はこれが上記の方法ではうまくいかないことを知っていますが、どこに行くのかを知るために、マクロを使用する疑似コードをいくつか示します。代わりに、単にマクロを拡大する、プリプロセッサは、ハッシュ関数を実行し、そのハッシュ関数の戻り値にそれを拡大していることを想像:再び
#include <iostream>
#include <string>
#define U64_HASH(inputString) getU64HashCode(inputString)
//my hash function
unsigned long long getU64HashCode (string inputString)
{
/*code*/
}
int main()
{
cout << U64_HASH("thanks for helping me") << endl;
return 0;
}
、理想的cout << U64_HASH("thanks for helping me") << endl;
は、私が書いたcout << 12223622566970860302 << endl;
に展開されますヘッダーファイルジェネレーターであり、このプロジェクトでうまく動作します。
最終解決
私はそれは単に素晴らしいです、と私は私のコンパイラに直接たい出力を供給することを可能にするように、このプロジェクトのためにJohn Purdy's perl scriptを使用することを決定しました。ありがとう、ジョン。
ないいくつかのクレイジーな魔法なし。 –
C++ 11には、ユーザー定義のリテラルとconstexprがあります。それらは役に立つかもしれません。 – Pubby
これらの文字列を常にハッシュとして '#define 'できますか? AFAIK Cプリプロセッサにはコードを実行する能力がありません。 – Serdalis