Есть ли какой-нибудь способ для автоматической генерации дел при необходимости (с определенной логикой, описанной в примере) для коммутатора? Или, может быть, у вас есть другое предложение (я просто новичок)
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 ...
… и так далее
Если вы не делаете что-то подозрительное внутри CHECK
, это должно быть так же просто, как for
цикл:
for(int i = 1; i <= num; ++i)
if(!CHECK(i))
return;
// some code
++num;
Конечно. Вы можете генерировать любой код, который вам нужен, вставить его в файл, а затем #include
сгенерированный файл везде, где нужно в вашем исходном файле.
Делать это можно иногда быть хорошей идеей, а иногда какой ужас идея. Все зависит от вашего кода / проблемы / обстоятельств.
Я предложил использовать шаблоны в этом случае.
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);