struct名をハッシュしてstructメンバーを初期化したいとします。constexprコンストラクタの初期化子リストのconstexpr関数
constexpr uint32_t myHash(const char* const data)
{ //Some code for hash
return myHash;
}
struct My_Struct{
constexpr Test() : ID(myHash("My_Struct"))
{
}
const uint32_t ID;
}
私が持っている場合:
constexpr My_Struct my_constexpr_struct;
次にハッシュが正常にコンパイル時に計算されます。私は私の主な機能を持っているときしかし、
My_Struct my_normal_struct;
が、それは単に、コンパイル時定数で構造体のメンバを初期化するのではなく、コード内
constexpr uint32_t myHash(const char* const data)
関数を呼び出します。
これは明らかに回避できない大きなパフォーマンス上のペナルティを招きます。
コンパイラにコンパイル時にこれを実行させる方法に関する意見や提案はありますか?私は本当にやりたいとは思わない:
constexpr uint32_t MY_STRUCT_ID = myHash("My_Struct");
struct My_Struct{
constexpr Test() : ID(MY_STRUCT_ID)
{
}
const uint32_t ID;
ありがとう。
おかげで、この(またはこれのいくつかのバリエーションが)仕事ができます。 – Flip