Генерация вызова функции Variadic с помощью макроса - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь сгенерировать вызов функции с помощью # define

У меня есть несколько наборов функций

void foo1(whateverType a);
void foo2(whateverType a, whaterverType b);

... до

void foo4(... a, ...b, ...c, ...d);

То, что я пытаюсь сделать, - это макрос, который будет выбирать правильный вызов функции в зависимости от того, сколько параметров передано макросу.

В основном я пробовал что-то вродеэто и все вокруг

# define genFunCall(...) genFunctionName(__VA_ARGS__)(__VA_ARGS__)

, где genFunctionName равно

# define genFunctionName(...) CONCAT(foo, COUNT_VA_ARGS(__VA_ARGS__))

без успеха.

(COUNT_VA_ARGS и CONCAT оба указаны ниже)

Может быть, это поможет: #define, который я использую (COUNT_VA_ARGS), работает с использованием непосредственно в вызове функции, например

printf("%d\n", COUNT_VA_ARGS(10, 10, 10, 10));

, но не при использовании через некоторые другие макросы.

конечная цель - вызвать его в коде, подобном следующему:

int main() {
  genFunCall(1, 2, 3, 4);
  return 0;
}

Я использую gcc via mingway в дистрибутиве Windows (10).gcc.exe (i686-posix-dwarf-rev0, Built by MinGW-W64 project) 7.3.0

Concat

#define SUB_CONCAT(a,b) a##b
#define CONCAT(a,b) SUB_CONCAT(a, b)

COUNT_VA_ARGS

Я нашел заголовок, который делает счет здесь

IЯ уже знаю, что имя макрокоманды не совпадает в названии, поэтому я изменил его, чтобы сделать пост более явным


РЕШЕНИЕ

Спасибо @HolyBlackCat, который дал мне рабочий пример .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...