Мне нужно объединить 3 bools для проверки всей таблицы истинности (8 комбинаций) в c ++.
У меня есть 2 особых случая, которые нужно учитывать, они a, b и c — все верно, а a, b — правда, а c — ложь.
Остальные не нуждаются в специальном обслуживании (они будут работать вместе без инструкций для конкретного случая)
Есть ли способ проверить только для этих двух случаев, а затем для отдельных случаев, но все же позволяют людям работать вместе?
Такие как,
если && б && с)
и если ( && б && ! С)
тогда если а, если б, если с соответственно
Я думаю, что он использует если иное, но мне не повезло, то, как он у меня сейчас, выполняет некоторые операции дважды, так как «a» верно для a b c, a b! C, а также для a.
Я надеюсь, что это достаточно ясно, я впервые публикую здесь, так что извинения, если это не так.
Ваши два особых случая могут быть обработаны примерно так:
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]();
Других решений пока нет …