我正在实现一个显示在屏幕上的 View 。根据以下配置参数,只要屏幕尺寸发生变化, View 就会被定位和调整大小。
enum DLViewLayout
{
DLViewLayoutSolo = 1,
DLViewLayoutDual = 2
};
enum DLViewFixedHorizontalProperty
{
DLViewFixedHorizontalPropertyWidth = 4, // View margins scale with the screen width.
DLViewFixedHorizontalPropertyMargin = 8 // View width scales with the screen width.
};
enum DLViewFixedVerticalProperty
{
DLViewFixedVerticalPropertyHeight = 16,
DLViewFixedVerticalPropertyMargin = 32
};
enum DLViewHorizonalAlignment
{
DLViewHorizonalAlignmentLeft = 64,
DLViewHorizonalAlignmentCenter = 128,
DLViewHorizonalAlignmentRight = 256
};
enum DLViewVerticalAlignment
{
DLViewVerticalAlignmentTop = 512,
DLViewVerticalAlignmentMiddle = 1024,
DLViewVerticalAlignmentBottom = 2048
};
我想知道在什么情况下按位 OR
组合枚举值以传递 View 状态是有意义的。
int viewState = DLViewLayoutSolo | DLViewFixedHorizontalPropertyWidth | DLViewFixedVerticalPropertyMargin | DLViewHorizonalAlignmentCenter | DLViewVerticalAlignmentMiddle;
// viewState = 1189
我希望类的用户配置所有参数。我该如何强制执行?
在类中,我可以通过按位 AND
组合状态来检索各个设置。
if (viewState & DLViewLayoutSolo)
{
// Set up solo view layout.
}
else if (viewState & DLViewLayoutDual)
{
// Set up dual view layout.
}
最佳答案
您想使用来自不同枚举的值组合标志?
这永远不会成为最佳实践,事实上,我从未在任何实践中看到它,无论好坏。这样一来,除其他问题外,任何使用公开这些标志属性的实例的元素都必须知道,或者应该知道,它是来自这些不同 enum
类型的值的合并。
既然值是按顺序递增的,为什么不简单地使用一个由所有成员组成的恰当命名的枚举呢?
此外,如果我们在这里谈论 .NET(虽然合法,但分号告诉我可能不合法),这样的 enum
类型应该用 [Flags]
属性,但仍然只组合相同 enum
类型的值。
关于c++ - 使用枚举使用按位参数组合的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5780284/