Elegante Initialisierung von std::array
Im Bereich von C std::array
Bedenken Sie den folgenden Codeausschnitt:
<code class="cpp">template<typename T, int N> void f(T value) { std::array<T, N> items = {value, value, value, value, value}; }</code>
Das manuelle Wiederholen des Werts ist zwar einfach, wird aber mühsam N nimmt zu. Um dieses Problem anzugehen, besteht ein eleganterer Ansatz darin, die strukturierten Bindungen und variadischen Vorlagen von C 17 zu nutzen.
Verwendung von Sequenzgeneratoren und der Wiederholungsfunktion
Der Schlüssel zu dieser Eleganz Die Lösung besteht darin, eine Sequenz vom Typ seq<0,1,2,3,...N-1> zu generieren. mit genseq_t<> Generator. Mit diesem Sequenztyp können wir eine Wiederholungsfunktion definieren, die einen Wert und die generierte Sequenz als Parameter akzeptiert und ein std::array
Beispielimplementierung
<code class="cpp">template<typename T, int N> void f(T value) { // genseq_t<N> represents seq<0,1,...N-1> std::array<T, N> items = repeat(value, genseq_t<N>{}); }</code>
Musterdetails
Diese Technik ermöglicht eine präzise und elegante Initialisierung von std::array
Das obige ist der detaillierte Inhalt vonWie initialisiere ich „std::array' elegant mit nicht standardmäßigen konstruierbaren Typen in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!