我需要结合3个bool来测试c ++中的整个真值表(8种组合)。
我有2个需要注意的特殊情况,它们是a,b和c都是真的,而a,b是真的,但c是假的。
其余部分不需要特别照顾(它们将自动一起工作,无需特定于案例的说明)
有没有办法只测试这两种情况,然后是个别情况,但仍允许个人一起工作?
,例如,
if(a& b&& c)
和if(a&& b&&!c)
然后如果a,如果b,如果c分别
我认为它使用if else,但我没有运气,我现在的方式执行一些操作两次,因为“a”在b c,b!c和a中都是真的。
我希望这很清楚,我第一次在这里发帖,如果不是,那就道歉。
答案 0 :(得分:1)
您的两个特殊情况可以处理如下:
if (a && b)
if (c)
all_true();
else
ab_true_c_false();
另一种可能性是将算术结合起来,然后将结果用作索引:
typedef void (*action)();
// handlers for the individual cases:
void all_false() { std::cout << "all_false"; }
void a_true() { std::cout << "a true"; }
// ...
// table of handlers. The order of handlers in the array is critical.
static const action actions[] = {
all_false, a_true, b_true, ab_true,
c_true, ac_true, bc_true, abc_true };
// Create index into array
int x = a | (b << 1) | (c << 2);
// invoke correct handler:
actions[x]();