检查其他对象之一是否为真的最佳方法
Best way to check if one of other objects is true or not
我正在寻找实现此方案的最佳方法:
我有 4 个具有布尔成员的对象,在应用程序的流程中,有时它们被设置为 true,有时被设置为 false,具体取决于条件;
然后我有一个最终函数,它获取其中的 1 个对象,并且需要检查其他 3 个对象中的一个是否将成员设置为 true 。
问题是我知道如何进行脏检查,我正在寻找更简洁的方法,这里是我的最终函数代码:
class Obj
{
public :
Obj(int _id) : id(_id)
bool status;
int id // only 4 objects are created 0,1,2,3
}
m_obj0 = new Obj(0) ;
m_obj1 = new Obj(1) ;
m_obj2 = new Obj(2) ;
m_obj3 = new Obj(3) ;
bool check(Obj* obj)
{
if(obj->id == 0)
{
if(m_obj1->status || m_obj2->status || m_obj3->status)
{
return true;
}
return false;
}else if(obj->id == 1)(
if(m_obj0->status || m_obj2->status || m_obj3->status)
{
return true;
}
return false;
}else if(obj->id == 2)(
if(m_obj0->status || m_obj1->status || m_obj3->status)
{
return true;
}
return false;
}else if(obj->id == 3)(
if(m_obj0->status || m_obj1->status || m_obj2->status)
{
return true;
}
return false;
}
有没有更简洁的方法来完成这个检查功能?
您可以将m_obj设置为数组。然后使用for循环检查
bool check(Obj* obj)
{
for (int i = 0; i < 4; i ++) {
if (obj->id == i) continue;
if (m_obj[i]->status == true)
return true;
}
return false;
}
或者加起来,然后减去m_obj[obj->id]->status。检查结果是否为零
bool check(Obj* obj)
{
int result = m_obj[0]->status+m_obj[1]->statusm_obj[2]->status
+m_obj[3]->status-m_obj[obj->id]->status;
return (result!=0);
}
我正在寻找实现此方案的最佳方法:
我有 4 个具有布尔成员的对象,在应用程序的流程中,有时它们被设置为 true,有时被设置为 false,具体取决于条件;
然后我有一个最终函数,它获取其中的 1 个对象,并且需要检查其他 3 个对象中的一个是否将成员设置为 true 。
问题是我知道如何进行脏检查,我正在寻找更简洁的方法,这里是我的最终函数代码:
class Obj
{
public :
Obj(int _id) : id(_id)
bool status;
int id // only 4 objects are created 0,1,2,3
}
m_obj0 = new Obj(0) ;
m_obj1 = new Obj(1) ;
m_obj2 = new Obj(2) ;
m_obj3 = new Obj(3) ;
bool check(Obj* obj)
{
if(obj->id == 0)
{
if(m_obj1->status || m_obj2->status || m_obj3->status)
{
return true;
}
return false;
}else if(obj->id == 1)(
if(m_obj0->status || m_obj2->status || m_obj3->status)
{
return true;
}
return false;
}else if(obj->id == 2)(
if(m_obj0->status || m_obj1->status || m_obj3->status)
{
return true;
}
return false;
}else if(obj->id == 3)(
if(m_obj0->status || m_obj1->status || m_obj2->status)
{
return true;
}
return false;
}
有没有更简洁的方法来完成这个检查功能?
您可以将m_obj设置为数组。然后使用for循环检查
bool check(Obj* obj)
{
for (int i = 0; i < 4; i ++) {
if (obj->id == i) continue;
if (m_obj[i]->status == true)
return true;
}
return false;
}
或者加起来,然后减去m_obj[obj->id]->status。检查结果是否为零
bool check(Obj* obj)
{
int result = m_obj[0]->status+m_obj[1]->statusm_obj[2]->status
+m_obj[3]->status-m_obj[obj->id]->status;
return (result!=0);
}