Volevo scrivere una funzione con una lista di argomenti variabili. Voglio esplorare le mie opzioni. Sono abbastanza sicuro di essere arrivato in una classe di template boost progettata per questo scopo, ma non riesco a pensare al nome di questo? Qualcuno può dirmelo? o ho sognato questo! GrazieElenchi di argomenti variabili con boost?
8
A
risposta
7
Se è necessario accettare solo un numero variabile di argomenti dello stesso tipo, prendere un contenitore sarebbe la cosa comune da fare. La creazione del contenitore tuttavia può essere alleviato con Boost.Assign:
void f(const std::vector<int>& vec) {}
f(boost::assign::list_of(1)(2)(3)(4));
In alternativa si può andare per l'overloading degli operatori (ad esempio di operator()
o operator<<
) da soli, in modo simile a quello adottato dai torrenti della libreria standard:
op() << arg1 << arg2 << arg3;
Se si desidera fornire una funzione variadic sicura al tipo (senza utilizzare le funzioni C++ 0x), è possibile utilizzare Boost.Preprocessor. Un esempio generico:
#define OUT(z, n, name) << name ## n
#define MAKE_FUNC(z, n, unused) \
template<class T BOOST_PP_ENUM_TRAILING_PARAMS(n, class T)> \
void func(T t BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(n, T, t)) { \
std::cout << t BOOST_PP_REPEAT(n, OUT, t) << std::endl; \
}
BOOST_PP_REPEAT(9, MAKE_FUNC, ~) // generates func() versions taking 1-10 arguments
func(1, "ab", 'c'); // prints "1abc"
Problemi correlati
- 1. Elenchi di argomenti variabili in C++/CLI
- 2. boost :: static_visitor con più argomenti
- 3. jQuery $ .when() con argomenti variabili
- 4. powershell: script con argomenti variabili
- 5. valori multipli per una proprietà con elenchi di argomenti variabili in Sass
- 6. Elenco di argomenti variabili con Visual Basic?
- 7. chiamate di metodo boost Python con argomenti di riferimento
- 8. C di argomenti variabili refactoring
- 9. Analisi LPTSTR * argomenti della riga di comando con boost :: program_options
- 10. elenchi di argomenti di subroutine perl - "passa per alias"?
- 11. Java 8: Lambda con argomenti variabili
- 12. Funzioni con argomenti variabili in javascript/jQuery
- 13. Ottieni meno elenchi di variabili usando less.js
- 14. Parametri con e senza argomenti in boost :: program_options
- 15. C++ boost :: program_options lettura argomenti compatibili con getopt_long
- 16. program_options Boost: parsing lista degli argomenti più
- 17. C, riguarda le funzioni di argomenti variabili
- 18. confronto di elenchi Scala con elenchi Java
- 19. C++ Template costruttore di classe con argomenti variabili
- 20. Scala implicita con la lista di argomenti variabili
- 21. Aiutare a capire boost :: bind argomenti segnaposto
- 22. gdb | visualizzare la lista di argomenti variabili
- 23. Come vengono implementati gli elenchi di argomenti di lunghezza variabile?
- 24. Passando argomenti variabili a un'altra funzione che accetta un elenco di argomenti variabili
- 25. Passaggio all'elenco di argomenti variabili a sprintf()
- 26. variabili di istanza python come argomenti opzionali
- 27. boost :: spirit :: qi e variabili fuori sequenza
- 28. Elenchi con annotazioni Java
- 29. Chiama un costruttore da argomenti variabili con PHP
- 30. con boost :: test di
Si intende conteggio argomento variabile ma un tipo o anche tipi arbitrari? –
Non sono sicuro di quale sia esattamente la libreria fornita, non riesco a trasferirla, immagino sia stata una sorta di miglioramento rispetto a va_list - possibilmente digitare la sicurezza – aukm
La tua funzione ha solo bisogno di prendere argomenti di un tipo o no? –