Самый простой способ перевернуть логическое значение? - PullRequest
106 голосов
/ 04 марта 2009

Я просто хочу перевернуть логическое значение, основываясь на том, что оно уже есть. Если это правда - сделайте это ложным. Если это ложь - сделайте это правдой.

Вот мой фрагмент кода:

switch(wParam) {

case VK_F11:
  if (flipVal == true) {
     flipVal = false;
  } else {
    flipVal = true;
  }
break;

case VK_F12:
  if (otherVal == true) {
     otherValVal = false;
  } else {
    otherVal = true;
  }
break;

default:
break;
}

Ответы [ 11 ]

0 голосов
/ 04 марта 2009

Очевидно, вам нужно гибкое решение, которое может поддерживать типы, маскирующиеся под логические значения. Для этого необходимо следующее:

template<typename T>    bool Flip(const T& t);

Затем вы можете специализировать это для различных типов, которые могут претендовать на логическое значение. Например:

template<>  bool Flip<bool>(const bool& b)  { return !b; }
template<>  bool Flip<int>(const int& i)    { return !(i == 0); }

Пример использования этой конструкции:

if(Flip(false))  { printf("flipped false\n"); }
if(!Flip(true))  { printf("flipped true\n"); }

if(Flip(0))  { printf("flipped 0\n"); }
if(!Flip(1)) { printf("flipped 1\n"); }

Нет, я не серьезно.

...