Mitgliedsvariable vom Typ std :: arrayT,?

7

Wie deklariere und setze ich eine Membervariable für eine Vorlagenklasse AClass vom Typ std::array<T, ?> (mit nicht definierter Größe)? Das tatsächliche std::array wird im Konstruktor erstellt, wobei die Größe des Arrays ein Konstruktorparameter ist.

In Pseudo-C ++ - Code:

%Vor%

Wie würde der Code aussehen?

    
clstaudt 18.12.2012, 14:48
quelle

4 Antworten

14

Benutze std::array nicht dafür, benutze std::vector . Die Größe von std::array muss eine Kompilierzeitkonstante sein. Wenn Sie es im Konstruktor übergeben möchten, müssen Sie std::vector verwenden.

    
Björn Pollex 18.12.2012, 14:50
quelle
9
  

Das tatsächliche std::array wird im Konstruktor erstellt, wobei die Größe des Arrays ein Konstruktorparameter ist.

Die Größe eines std::array muss zur Kompilierzeit bekannt sein, was in Ihrem Fall nicht der Fall ist.

Sie müssen std::vector dafür verwenden.

    
NPE 18.12.2012 14:50
quelle
4

Getrennt von der Verwendung von std::vector , wenn die Größe zur Laufzeit wirklich definiert ist, können Sie auch die Größe zum Zeitpunkt der Kompilierung angeben (z. B. den maximal möglichen Wert je nach Problem) und den Template-Parameter an Clients weitergeben deiner Klasse zB

%Vor%

Sie verwenden es dann so:

%Vor%     
Giovanni Azua 18.12.2012 14:53
quelle
2

Sie können nicht std::array mit undefinierter Größe haben.
Verwenden Sie stattdessen std::unique_ptr<T[]> oder std::vector .

    
Abyx 18.12.2012 14:55
quelle

Tags und Links