Je voulais écrire une fonction avec une liste d'arguments variable. Je veux explorer mes options. Je suis à peu près sûr que je suis tombé sur une classe de modèle de boost qui a été conçue à cet effet, mais je ne peux pas penser à son nom? Quelqu'un peut-il me dire? ou ai-je rêvé cela! MerciListes d'arguments variables avec boost?
8
A
Répondre
7
Si vous avez seulement besoin d'accepter un nombre variable d'arguments du même type, prendre un conteneur serait la chose la plus courante. Création du conteneur peut toutefois être assoupli en utilisant Boost.Assign:
void f(const std::vector<int>& vec) {}
f(boost::assign::list_of(1)(2)(3)(4));
Sinon, vous pouvez opter pour une surcharge opérateur (par exemple de operator()
ou operator<<
) vous, semblable à l'approche adoptée par les cours d'eau de la bibliothèque standard:
op() << arg1 << arg2 << arg3;
Si vous voulez vraiment fournir une fonction variadique de type sécurité (sans utiliser les fonctionnalités C++ 0x), Boost.Preprocessor peut vous aider. Un exemple générique:
#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"
Questions connexes
- 1. Listes d'arguments variables en C++/CLI
- 2. Problèmes avec boost :: ptr_vector et boost :: tout
- 3. comparant les listes avec des listes
- 4. boost :: sérialisation de boost :: unordered_map
- 5. Combinaison de nombres de listes variables w/LINQ
- 6. Crash avec boost :: thread
- 7. Liaison avec erreur Boost
- 8. problème avec boost :: bind
- 9. test avec boost
- 10. static_cast avec boost :: shared_ptr?
- 11. "Listes de tranches" et "l'ellipse" en Python; Tranches de listes et listes de listes avec listes de tranches
- 12. Variables-variables locales avec Emacs et Sweave
- 13. Listes avec allocateurs simultanés
- 14. problème avec les listes?
- 15. aide avec des listes?
- 16. problème avec les listes
- 17. stockage pour les listes de traitement des arguments variables
- 18. Les tests Intellisense boost :: boost :: boost :: boost :: boost :: boost :: classname ....... pourquoi?
- 19. Comment utiliser boost :: mpl :: fold avec boost :: fusion :: map?
- 20. Utiliser boost :: gil :: color_converted_view avec boost :: gil :: for_each_pixel
- 21. Boost :: lie une méthode avec boost :: function parameter
- 22. Quelqu'un at-il déjà utilisé boost :: singleton avec boost :: logger?
- 23. Perform connected_components avec adjacency_list Boost où vertexList =
- 24. Requêtes SolrNet avec fonctions boost
- 25. Programme proxy simple avec BOOST
- 26. Compilation boost :: thread avec Eclipse
- 27. Réécriture de fichier avec boost?
- 28. Tests unitaires avec boost :: statechart
- 29. wrapping boost :: ublas avec swig
- 30. listes à trier, avec des listes à trier
Vous voulez dire le nombre d'arguments variable mais un type, ou des types arbitraires? –
Je ne sais pas exactement ce que la bibliothèque a fourni, je ne peux pas sembler le déplacer, je suppose que c'était une sorte d'amélioration par rapport à va_list - éventuellement par sécurité – aukm
Est-ce que votre fonction doit uniquement prendre des arguments? –