Ho una funzione inline variadic inline int foo(...)
Ho bisogno foo()
di chiamare una macro (chiamiamolo MACRO
), che è anche variadic.
Fondamentalmente ho bisogno di foo()
per passare tutti i suoi parametri di input a MACRO
. Ridefinire foo()
come un'altra macro sarebbe una soluzione semplice a causa dell'opzione __VA_ARGS__
, ma ho anche bisogno di foo()
per restituire un valore.
Nota: sto cercando di interfacciare due parti del codice già scritto e non sono autorizzato a modificarle. foo(...)
viene utilizzato nella prima parte del codice e MACRO
è definito nella seconda parte. L'unica cosa che dovrei fare è definire un foo()
che usi MACRO
e non posso perché sono entrambi variadici.Funzione Variadica chiamare un variadic macro
risposta
Quello che chiedi è impossibile.
Gli argomenti di una funzione variad sono determinati in fase di esecuzione, ma una macro si espande in fase di compilazione.
Impossibile? Questo è C++. – Yakk
@Yakk È __is__ impossibile. Leggi di nuovo la sua domanda. 'pippo' deve essere una funzione, non una macro. – orlp
"Perché' foo' deve restituire un valore. " Tutto ciò di cui abbiamo bisogno è una macro che restituisca un valore! Sacrifica 3 capre vergini sul marte solistizio e chiamami al mattino. Oppure, sai, evoca abomini con codice C++. O funziona. – Yakk
Effettuare foo
una macro che contiene una lambda che restituisce un valore e quindi richiama quella lambda.
#define foo(...) \
[&](auto&&...args){ \
/* do something with args, or __VA_ARGS__ */ \
MACRO(__VA_ARGS__); \
return 7; \
}(__VA_ARGS__)
ora int x = foo(a, b, c);
saranno entrambi chiamare lambda all'interno foo
, e dentro che lambda chiamare la macro su (a, b, c)
, e possono restituire un valore.
Peccato per chi mantiene il tuo codice successivo.
Inaudito per puro terrore. – Quentin
Si noti che 'args ...' e '__VA_ARGS__' possono differire per casi come' foo (arg1, (extra, parentesi, intorno, virgola, operatore, arg2)); 'o semplice' foo (function_with_side_effect()) '. – Jarod42
@ Jarod42 sì! 'Auto && .... args' e' (__VA_ARGS __) 'sono opzionali e possono causare effetti collaterali imprevedibili. Comunque, ti dà gli argomenti come argomenti, oltre che come token, che immagino sia ciò che l'OP voleva. – Yakk
- 1. Aggiunta di argomenti predefiniti alla macro variadica
- 2. Espansione macro variadic MSVC++
- 3. Java Funzione Variadica parametri
- 4. ricorsive Funzione Variadica template
- 5. aliasing una funzione template variadic
- 6. Passaggio di un'ellissi a un'altra funzione variadica
- 7. Interoperabilità della funzione variadica C e Fortran
- 8. La funzione Variadic (va_arg) non funziona con float?
- 9. Come passare elementi di una matrice alla funzione variadica?
- 10. Le macro Variadic non sono standard?
- 11. Come definire una funzione variadic
- 12. Go - parametri Funzione Variadica pass-through
- 13. Come chiamare l'idioma di utilizzare un array per applicare una funzione ad un pacchetto di variadic
- 14. lista variadica vs parametro template singolo: cosa dice lo standard?
- 15. Chiamare una macro all'interno di un'altra macro in Twig
- 16. Come fare una macro variadic (numero variabile di argomenti)
- 17. Come estrarre un set selezionato di argomenti di una funzione variadic e usarli per chiamare un'altra funzione
- 18. È possibile iterare su argomenti in macro variadic?
- 19. Come creare una macro variadic per std :: cout?
- 20. Come faccio a rendere questa macro variadic in clojure?
- 21. Elixir Macro: Potenza ** funzione
- 22. Come creare una funzione variadica con valore sentinella personalizzato?
- 23. Macro in C per chiamare una funzione che restituisce un intero e quindi restituisce una stringa
- 24. variadic mascherina mascherine variadic
- 25. modello di funzione variadic senza parametri formali
- 26. L'asterisco di sottolineatura Scala nella funzione Variadic?
- 27. C++ 11 variadic std :: parametro funzione
- 28. Haskell: come scrivere una funzione variadica monadica, con parametri che usano il contesto monadico
- 29. Come chiamare ricorsivamente una macro in jinja2?
- 30. Come posso chiamare indirettamente una macro in un modello Jinja2?
È possibile utilizzare il modello variadico per 'pippo' anziché ellissi? – Jarod42
Stai parlando di vararg o modelli di funzioni variadiche? Con uno il tuo problema può essere risolto, con l'altro non può. – Quentin
Non può essere fatto. I parametri delle funzioni sono impostati in fase di esecuzione, i macro vengono espansi prima della compilazione. Butto via questo casino e cerco un modo ragionevole di fare qualunque cosa stia cercando di fare. –