Ich wollte eine Funktion mit einer variablen Argumentliste schreiben. Ich möchte meine Möglichkeiten erkunden. Ich bin mir ziemlich sicher, dass ich über eine Boost-Template-Klasse gekommen bin, die für diesen Zweck entwickelt wurde, aber ich kann mir den Namen nicht vorstellen. Kann mir das jemand sagen? oder habe ich das geträumt? DankVariable Argumentlisten mit Boost?
8
A
Antwort
7
Wenn Sie nur eine variable Anzahl von Argumenten des gleichen Typs akzeptieren müssen, wäre die Einnahme eines Containers das Übliche. jedoch Schaffung des Behälters kann Boost.Assign mit gelockert werden:
void f(const std::vector<int>& vec) {}
f(boost::assign::list_of(1)(2)(3)(4));
Alternativ Sie für Betreiber Überlastung (zB von operator()
oder operator<<
) gehen kann, sich, ähnlich dem Vorgehen der Standardbibliothek Ströme genommen:
op() << arg1 << arg2 << arg3;
Wenn Sie wirklich eine typsichere Variadic-Funktion (ohne Verwendung von C++ 0x-Funktionen) bereitstellen möchten, kann Boost.Preprocessor helfen. Ein generisches Beispiel:
#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"
Verwandte Themen
- 1. Objective-C herumlaufen ... keine abgebrochenen Argumentlisten
- 2. Auspacken von Argumentlisten für Ellipsen in R
- 3. Warum enden Argumentlisten in bestimmten Cocoa-Methoden mit einem Null?
- 4. Mehrere Werte für eine Eigenschaft mit variablen Argumentlisten in Sass
- 5. Forward-Deklaration von Boost :: Thread-Variable
- 6. Variable Argumentlisten in C-Funktionen - Wie kann ich die Arg-Liste richtig durchlaufen?
- 7. Probleme mit boost :: ptr_vector und boost :: jede
- 8. Wrap boost :: optional mit boost :: Python
- 9. boost :: TIME_UTC (_) mit verschiedenen Boost-Versionen
- 10. Mit Boost-Welle
- 11. Boost-Python-Methodenaufrufe mit Referenzargumenten
- 12. Mit boost :: Iterator
- 13. static_cast mit boost :: shared_ptr?
- 14. Boost mit Emscript verwenden
- 15. Mit boost :: zuweisen :: LIST_OF
- 16. VS2013 Boost mit NuGet
- 17. boost python mit threads
- 18. Fataler Fehler mit Boost
- 19. Absturz mit boost :: thread
- 20. Parallelitätsprobleme mit Boost Eigenschaftsbaum
- 21. Problem mit Boost-Serialisierung
- 22. Lochung mit boost :: asio
- 23. Mocking mit Boost-:: Test
- 24. mit Nanosekunden mit Boost: posix_time
- 25. Wie boost :: bind mit nicht kopierbaren Parametern, zB boost :: promise?
- 26. Kompilieren mit einzelnen Boost-Bibliotheken, ohne Boost installieren
- 27. Boost :: Funktion von boost :: lambda :: bind von new_ptr mit Parametern
- 28. Klassenmember Funktion als Rückruf mit boost :: bind und boost :: function
- 29. Solr bq vs boost mit edismax für recency boost
- 30. boost :: serialisierung von boost :: unordered_map
Sie meinen variable Argumentanzahl aber einen Typ oder auch beliebige Typen? –
Ich bin mir nicht sicher, was genau die Bibliothek zur Verfügung gestellt hat, ich kann es nicht verschieben, ich denke, es war eine Art Verbesserung gegenüber va_list - möglicherweise Typ Sicherheit – aukm
Muss Ihre Funktion nur Argumente eines Typs annehmen oder nicht? –