Как сделать макрос для генерации кода в цикле? - PullRequest
0 голосов
/ 11 сентября 2018

Я заметил следующий код в обзоре кода:

for (int i = 0; i < 50; ++i) {
  switch(i) {
    case 0:
      return f1();
    case 1:
      return f2();
    ...
    case 49:
      return f50();
  }
}

, и мне интересно, есть ли какой-нибудь элегантный способ, такой как использование макроса для упрощения этого кода (сократить его до нескольких строк):

спасибо.

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018
for (int i = 0; i < 50; ++i) {
  switch(i) {
    case 0:
      return f1();
    ...

может быть уменьшено до

return f1();

Макросы не требуются.

0 голосов
/ 11 сентября 2018

Не может быть никакого макроса CPP, чтобы сгенерировать это, но это обычная практика в C или C ++ - создавать вещи с чем-то другим. Например, вы можете тривиально написать на Python, Ocaml или AWK какой-нибудь скрипт, который генерирует ваш код, и такие действия являются обычной практикой (для этого нужно просто добавить несколько строк в Makefile). И вы также можете использовать другие препроцессоры, такие как m4 или gpp .

Кстати, в вашем случае вы могли бы рассмотреть объявление массива из 50 функций-указателей и косвенный вызов их.

...