目標は、UI レベルでどのタイプのユーザーがどの操作を実行できるかを制御することです。このコードはしばらくの間有効です。少しだけ改善したいです。私が改善しようとしているファイルはおそらく自動生成されているはずですが、それでは変更が大きすぎるため、より簡単な解決策を探しています。
私たちが呼び出すファイルにはPermissionBits.h
、これらの束があります。
// Here names are mangled; for example XYZ_OP_A is:
// permission to operation A in category/context XYZ
// SCU64 = static const unsigned __int64
// Some namespaces utilize all 64 bits
// The actual values (as long as they are proper bit fields)
// do not matter - they are always used by name
namespace XYZPermissionBits
{
SCU64 XYZ_OP_A = 1UI64 << 0; // 1 = 0x0000000000000001
SCU64 XYZ_OP_B = 1UI64 << 1; // 2 = 0x0000000000000002
SCU64 XYZ_OP_C = 1UI64 << 2; // 4 = 0x0000000000000004
SCU64 XYZ_OP_C = 1UI64 << 3; // 8 = 0x0000000000000008
SCU64 XYZ_OP_D = 1UI64 << 4; // 16 = 0x0000000000000010
SCU64 XYZ_OP_E = 1UI64 << 5; // 32 = 0x0000000000000020
SCU64 XYZ_OP_F = 1UI64 << 6; // 64 = 0x0000000000000040
SCU64 XYZ_OP_G = 1UI64 << 7; // 128 = 0x0000000000000080
SCU64 XYZ_OP_H = 1UI64 << 8; // 256 = 0x0000000000000100
SCU64 XYZ_OP_I = 1UI64 << 9; // 512 = 0x0000000000000200
SCU64 XYZ_OP_J = 1UI64 << 10; // 1024 = 0x0000000000000400
SCU64 XYZ_OP_K = 1UI64 << 11; // 2048 = 0x0000000000000800
SCU64 XYZ_OP_L = 1UI64 << 12; // 4096 = 0x0000000000001000
}
ショートカットの助けを借りても1UI64 << <numBits>;
、コーダーが重複した値でフラグを作成したり、タイプミスをしたりするなど、まだ問題があります.
理想的には、適切にフォーマットされ、次のように見えるマクロが必要です。
BITFIELDS_FOR_NAMESPACE(
//*************** <<== I want to make the namespace name more vivid
XYZPermissionBits,
//*************** <<== somehow if that is possible. It is not a must-have.
XYZ_OP_A, // Being able to add a comment here would be nice, but not critical
XYZ_OP_B,
XYZ_OP_C,
XYZ_OP_D,
XYZ_OP_E,
XYZ_OP_F,
XYZ_OP_G,
XYZ_OP_H,
XYZ_OP_I,
XYZ_OP_J,
XYZ_OP_K,
XYZ_OP_L
)
このマクロを柔軟にして、2 つ未満または 65 個を超える引数 (名前空間名 + 64 個のフラグ) を入力できないようにしたいと考えています。私がやりたいこと、またはそれに近いことをすることは可能ですか、それとも生成されたコードに頼るべきですか? 他にどんなアドバイスがありますか?