Struct avec des variables de modèle en C ++

Je joue avec des modèles. Je n’essaie pas de réinventer le std :: vector, j’essaie de comprendre la création de templates en C ++.

Puis-je faire les choses suivantes?

template  typedef struct{ size_t x; T *ary; }array; 

Ce que j’essaie de faire, c’est une version de base de:

 typedef struct{ size_t x; int *ary; }iArray; 

Il semble que cela fonctionne si j’utilise une classe à la place de struct, n’est-ce pas possible avec les structures typedef?

Le problème est que vous ne pouvez pas modéliser un typedef, il n’y a pas non plus besoin de typedef structs en C ++.

Ce qui suit fera ce dont vous avez besoin

 template  struct array { size_t x; T *ary; }; 
 template  struct array { size_t x; T *ary; }; 

Vous n’avez pas besoin de faire un typedef explicite pour les classes et les structures. De quoi avez-vous besoin du typedef ? De plus, le typedef après un template<...> est syntaxiquement incorrect. Utilisez simplement:

 template  struct array { size_t x; T *ary; } ; 

Vous pouvez modéliser une structure et une classe. Cependant, vous ne pouvez pas modéliser un typedef. Donc, le template struct array {...}; fonctionne, mais le template typedef struct {...} array; ne fait pas. Notez qu’il n’y a pas besoin de l’astuce typedef en C ++ (vous pouvez utiliser des structs sans le modificateur struct en C ++).

La norme dit (à 14/3. Pour les personnes non standard, les noms suivant un corps de définition de classe (ou le type dans une déclaration en général) sont des “déclarants”)

Dans une déclaration de modèle, une spécialisation explicite ou une instanciation explicite, la liste init-declarator dans la déclaration doit contenir au plus un déclarateur. Lorsqu’une telle déclaration est utilisée pour déclarer un modèle de classe, aucun déclarant n’est autorisé.

Faites-le comme les spectacles d’Andrey.

Parmi les autres réponses, le problème est que vous modélisez un typedef. Le seul “moyen” de le faire est d’utiliser une classe basée sur des modèles; c.-à-d. métaprogrammation de modèle de base.

 template class vector_Typedefs { /*typedef*/ struct array { //The typedef isn't necessary size_t x; T *ary; }; //Any other templated typedefs you need. Think of the templated class like something // between a function and namespace. } //An advantage is: template<> class vector_Typedefs { struct array { //Special behavior for the binary array } } 

La syntaxe est incorrecte. Le typedef doit être supprimé.