Автогенерация чехлов для выключателя. Или другое предложение

Есть ли какой-нибудь способ для автоматической генерации дел при необходимости (с определенной логикой, описанной в примере) для коммутатора? Или, может быть, у вас есть другое предложение (я просто новичок)

    int num = 0; // Global variable
.
.
.
switch (num)
{
case 0:
{
//some code
num++;
break;
}
case 1:
{
if (CHECK(1)) // CHECK is macros for comparing
{
//some code
num++;
}
break;
}
case 2:
{
if (CHECK(1) && CHECK(2))
{
//some code
num++;
}
break;
}
case 3:
{
if (CHECK(1) && CHECK(2) && CHECK(3))
{
//some code
num++;
}
break;
}
case 4 ...

… и так далее

0

Решение

Если вы не делаете что-то подозрительное внутри CHECK, это должно быть так же просто, как for цикл:

for(int i = 1; i <= num; ++i)
if(!CHECK(i))
return;

// some code
++num;
1

Другие решения

Конечно. Вы можете генерировать любой код, который вам нужен, вставить его в файл, а затем #include сгенерированный файл везде, где нужно в вашем исходном файле.

Делать это можно иногда быть хорошей идеей, а иногда какой ужас идея. Все зависит от вашего кода / проблемы / обстоятельств.

0

Я предложил использовать шаблоны в этом случае.

template <int level>
bool check()
{
return CHECK(level) && check<level - 1>();
}

template <>
bool check<0>() { return true;}

template <int level>
void caseCheck(int& num)
{
if (num == level)
{
if (check<level>())
// some code
num++;
}
else
caseCheck<level - 1>(num);
}

template <>
void caseCheck<0>(int& num)
{
// some code
num++;
}caseCheck<NUM_CASES>(num);
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector