在API中经常看到一个参数有多个选项,并且所有的选项都可以组合使用。今日看了一个程序,顿悟!
首先在一个类的定义里面声明一个enum,项目为你提供的选项。比如
class CMyClass
{
enum{TASK_MGR = 0x01,
TASK_KEYS = 0x02,
TASK_BAR = 0x04,
TASK_ALL = 0xFFFF};
//其他成员 。。。。。。
};
注意这里面的选项除了TASK_ALL按位与的时候结果一定要为0(比如这里的TASK_BAR可以换为0x0404),否则无法实现多项组合。
在需要组合的函数实现时候需要通过按位的或来判断用户输入了什么样的参数组合。以下是一个简单的例子。
BOOL CMyClass::DoSomething(DWORD usrOpt,bool IsClose,......)
{
if(usrOpt & TASK_MGR) //如果用户输入选项CMyClass::TASK_MGR,则按位与后结果为真若输入CMyClass::TASK_BAR,显然值为0。
{//... }
if(usrOpt & TASK_KEYS)
{// ......}
if(usrOpt & TASK_BAR)
{//......}
//很显然,如果用户选择CMyClass::KEY_ALL,那么没一个if的结果都为真,则每个if分支都将执行到。
//若参数usrOpt为组合CMyClass::KEY_MGR||CMyClass::KEY_BAR,显然usrOpt & TASK_MGR和usrOpt & TASK_BAR返回都为真,这样就实现了用户输入参数的任意组合,很简单,不是吗。
}