Автогенерация чехлов для выключателя.Или другое предложение - PullRequest
0 голосов
/ 24 ноября 2018

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

    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 ...

... и так далее

Ответы [ 3 ]

0 голосов
/ 24 ноября 2018

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

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

// some code
++num;
0 голосов
/ 04 декабря 2018

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

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 голосов
/ 24 ноября 2018

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

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

...