私の質問は次のとおりです。識別子として機能する多数の static const 整数があります。このため、コンパイル時に同じ値を持つ複数の定数があるかどうかを確認できるかどうかを知りたいです (ある種の静的アサート...)。
これらの定数は異なるモジュールで定義されているため、列挙型を使用したくありません。また、それらすべてに非常に長い列挙型を使用したくありません (また、それらのいくつかは互いに関連していません)。
ここに基本的な例があります:
// module: foo.h
const uint32_t ELEMENT_TYPE_FOO_X = 46;
const uint32_t ELEMENT_TYPE_FOO_Y = 51;
...
// module: boo.h
const uint32_t ELEMENT_TYPE_BOO_C = 21;
const uint32_t ELEMENT_TYPE_BOO_D = 51;
エラー: ELEMENT_TYPE_FOO_Y と ELEMENT_TYPE_BOO_D の値が同じです。
私はまったく専門家ではありません。このエラーを検出するために頭に浮かぶ唯一のことは、テンプレートの特殊化です。
template<uint32_t N>
struct element_traits {
};
template<ELEMENT_TYPE_FOO_X> {
enum { value = ELEMENT_TYPE_FOO };
};
しかし、それは複雑な解決策のようです。よりエレガントで優れたソリューションがあるかどうかはわかりません。これまでのところ何も見つかりませんでした。
前もって感謝します。