Перегрузка макросов C с _minimal_ строками - PullRequest
0 голосов
/ 22 июня 2019

Не сложный способ перегрузки MACROS с нулевым, одним, двумя аргументами

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

Теперь я сделал в следующем режиме

// For 1..2 arguments, we get 4 rows
#define GET_MACRO(_1,_2, NAME,...) NAME
#define FOO(...) GET_MACRO(__VA_ARGS__, FOO2, FOO1)(__VA_ARGS__)
#define FOO1(x) ABC(F(x))
#define FOO2(x,y) ABC(F(x), F(y))

FOO(x)  ->  ABC(F(x))

но у меня есть два вопроса

  1. возможно ли сделать это с менее чем 4 строками?
  2. возможно ли перегрузка на 0 аргументов в следующем режиме

    FOO() -> ABC()
    

Обновление: 2-й вопрос больше не актуален. Так что теперь у меня для 0..2 arg - 5 строк. Для 1..2 арг - 4 ряда. Таким образом, каждый дополнительный func_n_arg () должен иметь отдельный конвертер + 2 строки для подсчета аргументов. Можно ли сделать меньше строк макросов? за то же самое

...