ヘッダーのクラスごとに一意の番号を生成したいのですが、私の場合は素数ですが、これは連続した番号、つまり1、2、3、4などである必要があるとしましょう。
もちろん、これらをハードコーディングすることもできます。
struct A { enum { ID = 1; }; };
struct B { enum { ID = 2; }; };
struct C { enum { ID = 3; }; };
struct D { enum { ID = 4; }; };
実際にはクラスはそれほど小さくないため、これは非常にエラーが発生しやすく、IDの概要を完全に失いたくない場合は、途中で新しいクラスを追加する場合、次のすべての番号を変更する必要があります。
次のことができたらいいのにと思います。
struct A { enum { ID = get_next_int(); }; };
struct B { enum { ID = get_next_int(); }; };
struct C { enum { ID = get_next_int(); }; };
struct D { enum { ID = get_next_int(); }; };
ただし、constexpr関数の呼び出しには副作用がないため、これは不可能です。そのような結果をマクロで使うことも不可能だと思います。
私もそのようなもので幸運だろう:
struct A_id_holder : some_base_counter {};
struct A { enum { ID = A_id_holder::ID; }; };
struct B_id_holder : some_base_counter {};
struct B { enum { ID = B_id_holder::ID; }; };
struct C_id_holder : some_base_counter {};
struct C { enum { ID = C_id_holder::ID; }; };
struct D_id_holder : some_base_counter {};
struct D { enum { ID = D_id_holder::ID; }; };
しかし、正直なところ、それを実装する方法がわかりません。
目標を達成できますか?達成した場合、どのように達成できますか?