У меня есть встроенная переменная функция
inline int foo(...)
я нуждаюсь foo()
вызвать макрос (давайте назовем это MACRO
), что тоже вариадно.
В основном мне нужно foo()
передать все свои входные параметры MACRO
, переосмысление foo()
как другой макрос будет простым решением из-за __VA_ARGS__
вариант, но мне тоже нужно foo()
вернуть значение.
Примечание. Я пытаюсь связать две части уже написанного кода, и мне не разрешено их менять. foo(...)
используется в первой части кода и MACRO
определяется во второй части. Единственное, что я должен сделать, это определить foo()
который использует MACRO
и я не могу, потому что они оба разнообразны.
Делать 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)
и может вернуть значение.
Мне жаль, кто будет поддерживать ваш код дальше.
То, что вы спрашиваете, невозможно.
Аргументы функции variadic определяются во время выполнения, но макрос расширяется во время компиляции.