Angeben eines Typs für variadische Argumente
In diesem Artikel wird eine Methode untersucht, um sicherzustellen, dass alle an eine variadische Funktion oder variadische Vorlagenfunktion übergebenen Argumente vorhanden sind vom gleichen Typ, ohne zusätzliche Datenstrukturen wie Arrays, Vektoren oder Strukturen zu verwenden.
Variadische Funktionen und Vorlagenfunktionen
Variadische Funktionen und variadische Vorlagenfunktionen ermöglichen a Funktion zum Akzeptieren einer unbekannten Anzahl von Argumenten. Sie erzwingen jedoch keine Typbeschränkungen für die Argumente.
Typsicherheit erzwingen
Um sicherzustellen, dass alle Argumente vom gleichen Typ sind, können wir Folgendes annehmen Schritte:
Beispiel:
Der folgende Code zeigt, wie diese Technik implementiert wird:
template<typename R, typename...> struct fst { typedef R type; }; template<typename ...Args> typename fst<void, typename enable_if< is_convertible<Args, ToType>::value >::type... >::type f(Args...);
Verwendung:
Dieser Code stellt sicher, dass alle an f übergebenen Argumente in den ToType-Typ konvertiert werden können. Wenn ein Argument nicht konvertierbar ist, gibt der Compiler einen Fehler aus.
Ansatz zur späteren Konvertierung:
Alternativ, wenn Sie die Schritte zum Konvertieren von einem Array in kennen Um den gewünschten Typ zu ermitteln, können Sie den folgenden Ansatz verwenden:
template<typename ...Items> dragon_list_t make_dragon_list(Items... maidens) { std::array<Maiden, sizeof...(Items)> arr = {{ maidens ... }}; // here be dragons }
Fazit:
Durch die Verwendung von variadic-Vorlagenfunktionen und SFINAE können wir die Typsicherheit für variadic-Argumente erzwingen , um sicherzustellen, dass alle Argumente vom gleichen Typ sind. Dadurch können wir Funktionen erstellen, die mit homogenen Daten arbeiten, ohne dass zusätzliche Datenstrukturen erforderlich sind.
Das obige ist der detaillierte Inhalt vonWie können Sie sicherstellen, dass alle an eine variadische Funktion oder Vorlagenfunktion übergebenen Argumente vom gleichen Typ sind, ohne zusätzliche Datenstrukturen zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!