


Wie initialisiere ich ein „std::array' elegant mit nicht standardmäßig konstruierbaren Typen?
Oct 29, 2024 am 04:42 AMElegante Initialisierung von std::array mit einem nicht standardmäßig konstruierbaren Typ
Initialisierung eines std::array mit einem nicht standardmäßigen- Die Auswahl eines konstruierbaren Elementtyps kann eine mühsame Aufgabe sein. Das manuelle Wiederholen des Werts n-mal ist bei großen n ineffizient und fehleranfällig.
Um dieses Problem zu lösen, besteht ein eleganterer Ansatz darin, einen Sequenztyp und einen Generator zu verwenden. Die Schlüsselidee besteht darin, eine Folge von Indizes von 0 bis n-1 zu erstellen und dann eine Funktion zu verwenden, um wiederholt einen Wert auf jeden Index anzuwenden.
Hier ist eine Implementierung:
<code class="cpp">template<typename T, int...N> auto repeat(T value, seq<N...>) -> std::array<T, sizeof...(N)> { // Unpack N, repeating `value` sizeof...(N) times // Note that (X, value) evaluates to value return {(N, value)...}; }</code>
Zu Initialisieren Sie ein std::array mit diesem Ansatz:
<code class="cpp">template<typename T, int N> void f(T value) { // genseq_t<N> is seq<0,1,...N-1> std::array<T, N> items = repeat(value, genseq_t<N>{}); }</code>
Zusätzlich werden die folgenden Definitionen verwendet:
<code class="cpp">template<int ... N> struct seq { using type = seq<N...>; static const std::size_t size = sizeof ... (N); template<int I> struct push_back : seq<N..., I> {}; }; template<int N> struct genseq : genseq<N-1>::type::template push_back<N-1> {}; template<> struct genseq<0> : seq<> {}; template<int N> using genseq_t = typename genseq<N>::type;</code>
Diese Lösung bietet eine effiziente und elegante Möglichkeit, std::array zu initialisieren mit nicht standardmäßig konstruierbaren Typen, unabhängig vom Wert von n.
Das obige ist der detaillierte Inhalt vonWie initialisiere ich ein „std::array' elegant mit nicht standardmäßig konstruierbaren Typen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert?

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

GULC: C -Bibliothek von Grund auf neu gebaut

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die?

eindeutiger Gebrauch und Phrasenfreigabe

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)?

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher?

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient?
