Функция Variadic, вызывающая макрос Variadic

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

inline int foo(...)

я нуждаюсь foo() вызвать макрос (давайте назовем это MACRO), что тоже вариадно.

В основном мне нужно foo() передать все свои входные параметры MACRO, переосмысление foo() как другой макрос будет простым решением из-за __VA_ARGS__ вариант, но мне тоже нужно foo() вернуть значение.

Примечание. Я пытаюсь связать две части уже написанного кода, и мне не разрешено их менять. foo(...) используется в первой части кода и MACRO определяется во второй части. Единственное, что я должен сделать, это определить foo() который использует MACRO и я не могу, потому что они оба разнообразны.

7

Решение

Делать foo макрос, который содержит лямбду, которая возвращает значение, а затем вызывает эту лямбду.

#define foo(...) \
[&](auto&&...args){ \
/* do something with args, or __VA_ARGS__ */ \
MACRO(__VA_ARGS__); \
return 7; \
}(__VA_ARGS__)

сейчас int x = foo(a, b, c); оба будут вызывать лямбду внутри fooи внутри этой лямбды вызвать макрос (a, b, c)и может вернуть значение.

Мне жаль, кто будет поддерживать ваш код дальше.

7

Другие решения

То, что вы спрашиваете, невозможно.

Аргументы функции variadic определяются во время выполнения, но макрос расширяется во время компиляции.

1

По вопросам рекламы [email protected]