如果我想表示使用二进制的"标志",这样我可以通过他们,并将它们存储到像一个对象状态或期权或类似的东西OPTION1 | OPTION2在那里OPTION1是0001 OPTION2是0010,这样,所获取传递为0011,较选项的组合.
我将如何在C++中执行此操作?我在想类似的东西
enum Option {
Option_1 = 0x01,
Option_2 = 0x02,
Option_3 = 0x04,
//...
}
void doSomething(Option options) {
//...
}
int main() {
doSomething(Option_1|Option_2);
}
Run Code Online (Sandbox Code Playgroud)
但理想情况下,doSomething知道如何解释给定的选项.
我是在正确的轨道上吗?有没有更好的办法?
更新
我不是必须Option为每种可能的组合定义一个吗?
我目前正在编写一个大约6-12页的Web应用程序.在每个页面上,我希望用户能够执行以下一些(或全部)操作:查看,添加,更新和删除.
我想到的当前权限方案是在数据库中有一个整数.该整数将对应于二进制数(例如:26 - > 11010).生成的二进制数用作"切换"并确定用户具有的权限.什么位表示权限存储在另一个表中的定义.
我的问题是,如果每个页面有4个选项(查看,添加,编辑,删除),那么这种确定权限的方式可能会失控.
是否有人对于权限方案有任何其他想法,这种方案与此一样灵活(关于可配置性),但不是压倒性的(关于整数限制)?
采用这种情况:您在C#中绑定了一些标记枚举(并且实际上是从SQL Server中的Enum-ish表生成).假设您是经销商,并允许您的经销商指定他们发货的美国州.作为一名出色而优雅的软件工程师,您将这些作为可按位组合的标志值实现以节省存储:
create table USState (
StateID bigint, StateAbbr char(2), StateName varchar(50))
/* insert all US States + DC into USState, StateIDs must be in powers of two */
/* StateID 0 reserved for 'None': */
create procedure GetStatesByFlag (@StateFlags bigint) as
declare @StateIDs table
(
StateID bigint,
primary key (StateID)
)
insert into @StateIDs
select StateID
from USState
where @StateFlags & StateID != 0
or (@StateFlags = 0 and StateID = 0)
select s.StateID, s.StateAbbr, s.StateName
from
USState s …Run Code Online (Sandbox Code Playgroud) 是否有可能使用ONE-Liner(正常方式......)来检查是否设置了所有可能的枚举状态?
从enum水果我想知道它没有设置意味着没有香蕉,没有苹果,没有甜瓜.
我怎样才能做到这一点?
这是我的一项活动中的一个小代码.
Window window = this.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
window.addFlags(LayoutParams.FLAG_KEEP_SCREEN_ON);
Run Code Online (Sandbox Code Playgroud)
我已经设置了清单以允许使用WAKE_LOCK.现在,我不确定的是在一个活动中设置的标志.
如果许多活动中的一个向窗口"添加"一个标志,如屏幕保护标志,它们是否在整个应用程序中持久存在?
我的预感是,如果活动要设置或添加标志,则仅当标记的活动处于活动状态时,该标志才有效.如果它调用Intent来启动另一个活动(没有指定标志),则set标志将被取消,直到有意的,未标记的活动结束,然后它可以恢复到标记活动中的原始设置状态.
我错了吗?提前致谢.
我现在知道如何使用按位&AND运算符检查DWORD(特别是Windows样式)中是否存在某个标志.我该怎么做:
if (dwMyFlags & dwSomeFlag) {
// dwMyFlags contains dwSomeFlag
// ->> How do I remove dwSomeFlag from dwMyFlags?
}
Run Code Online (Sandbox Code Playgroud)
我知道减去它是行不通的,是否有一些运算符可以从DWORD中删除标志?
我不明白为什么我的SDL应用程序不会像我要的那样设置DOUBLE_BUF;
这是一个简短的代码,这个,没有参数执行打开全屏窗口,1024*768,在32 BPP模式.
#include <stdio.h>
#include <stdlib.h>
#include <SDL/SDL.h>
#include "main.h"
SDL_Surface *screen;
Main mainstruct;
void testModesInFormat(SDL_PixelFormat * format)
{
SDL_Rect **modes;
int i;
printf("Available hardware accelerated, fullscreen modes in %d bpp:\n",
format->BitsPerPixel);
modes = SDL_ListModes(format, SDL_FULLSCREEN | SDL_HWSURFACE | SDL_DOUBLEBUF);
// Check is there are any modes available
if(modes == (SDL_Rect **) 0)
{
printf("\tNo modes available!\n");
return;
}
// Check if our resolution is restricted
if(modes == (SDL_Rect **) - 1)
{
printf("\tAll resolutions available.\n");
}
else
{ …Run Code Online (Sandbox Code Playgroud) 我想知道如何处理名称为标志的文件,如'-a',' - f'等.我不能将它们作为参数传递给像rm或者这样的程序ls,因为它们被解释为标志,并且正在执行rm *或ls *只是运行那些带有文件名标志的程序(原因很明显).如何在程序参数中将标志作为普通文件名传递?
一些代码我使用标志来管理程序或服务.今天我遇到了问题,我想使用这种声明:
var port = flag.String("port", "", "port")
Run Code Online (Sandbox Code Playgroud)
它返回一个*string我无法转换为的类型变量string.我是如何解决问题的:
r.Run(":" + *port)
Run Code Online (Sandbox Code Playgroud)
这是有效的,但最佳做法是什么?我的意思是有一些函数正在等待字符串作为参数,在这种情况下我无法处理.
有一个叫我PowerShell脚本变量$IncludeSubfolders(或0或1)
根据它的值,我想Get-ChildItem在有或没有-Recurse选项的情况下调用方法.
目前,我的代码如下所示:
if($IncludeSubfolders) {
$Files = Get-ChildItem $RootPath -Name $FileMask -Recurse
} else {
$Files = Get-ChildItem $RootPath -Name $FileMask
}
Run Code Online (Sandbox Code Playgroud)
我想避免这种分支,如果有或没有它,只需Get-ChildItem要用一行代码调用.-Recurse$IncludeSubfolders10
这可以实现吗?怎么样?
Powershell版本5.0.10586.117