Heim >Backend-Entwicklung >C++ >Wie erkennt man STL-Container mithilfe von Typmerkmalen in C?
Ein Typmerkmal ist ein leistungsstarkes Werkzeug in C, das die Eigenschaften eines Typs zur Kompilierzeit auswertet . In dieser Frage wollen wir ein Typmerkmal (is_vector oder is_container) erstellen, das verschiedene gängige STL-Containertypen unterscheidet.
Die bereitgestellte Implementierung für is_vector stößt dabei auf einen Fehler Verwenden Sie nicht den Vorlagenparameter U. Um dies zu beheben, finden Sie hier eine überarbeitete Version:
<code class="cpp">template<class t> struct is_vector { static bool const value = false; }; template<class u> struct is_vector<:vector>> { static bool const value = true; };</:vector></class></class></code>
In Erweiterung des is_vector-Konzepts können wir ein generisches is_container-Merkmal erstellen, das verschiedene identifiziert STL-Containertypen:
<code class="cpp">template<typename t typename _="void"> struct is_container : std::false_type {}; template<typename... ts> struct is_container_helper {}; template<typename t> struct is_container().size()), decltype(std::declval<t>().begin()), decltype(std::declval<t>().end()) >, void > > : public std::true_type {};</t></t></typename></typename...></typename></code>
Diese verbesserte is_container-Eigenschaft kann angepasst werden, um nach zusätzlichen Container-spezifischen Merkmalen zu suchen, oder auf nur STL-Container beschränkt werden, indem das Vorhandensein bestimmter Mitgliedsfunktionen und -typen überprüft wird.
Das obige ist der detaillierte Inhalt vonWie erkennt man STL-Container mithilfe von Typmerkmalen in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!