0
votes

Puis-je créer un std :: vecteur d'une structure sans définir la structure en premier?

au lieu de: xxx

puis-je faire quelque chose comme: xxx

ou même, car je n'ai pas besoin d'un nom pour Cette structure que je ne l'utilise que dans ce vecteur: xxx

J'utilise C ++ pendant de nombreuses années et je ne pense pas que ce soit possible. Je pense que ce serait bien si ...

ou y a-t-il un moyen?


1 commentaires

Vous ne pouvez pas faire cela, sauf si vous vous contentez d'un std :: tuple .


3 Réponses :


-2
votes

non , vous ne pouvez pas le faire lorsque vous déclarez une variable ou un type réel, comme C ++ est une langue typée staticellement. La construction C ++ pour permettre aux types généraux sont des modèles, c'est-à-dire xxx

que vous pouvez utiliser directement, par exemple xxx

ou dans un code de modèle xxx


1 commentaires

Je ne vois pas comment il est pertinent que c ++ est une langue statistique typée.



0
votes

Dernier j'ai vérifié, tout type enregistré dans un conteneur standard (Dunno pourquoi vous référence à STL, qui est similaire mais différent et en tout cas ambigu!) doit être complet. Un type (Forwand-) déclaré n'est pas complet. Si vous voulez savoir, veuillez vérifier la norme de la version que vous utilisez ou au moins mentionner ici.

concernant la déclaration en ligne d'une structure dans un paramètre de modèle, par exemple g ++ dit "Les types peuvent ne pas être définis dans des arguments de modèle" lorsque j'essaye cela. Je ne peux pas vous donner une raison convaincante pour laquelle cela ne devrait pas travailler. Après tout, tous les conteneurs fournissent un Element_Type alias et avec auto de C ++ 11 qui ne devrait pas être un problème en général.


3 commentaires

Vous ne pouvez pas les utiliser car ils n'ont pas de liaison (c'est-à-dire que vous ne pouvez pas trouver le CTOR ou DTOR)


Je ne suis pas sûr de ce que vous essayez de dire, @artyer.


Lorsque le modèle est instancié, il obtient le type de symbole. Les structures déclarées dans des paramètres de modèle sont Sans nom. Ils n'ont donc pas de nom de symbole, vous ne pouvez donc pas être utilisé pour instancier un modèle (car le nom de classe incorpore les symboles qui y sont transmis, et il ne peut également pas utiliser de membres de la structure car elle ne peut pas les trouver par nom). Ils n'ont "pas de liaison".



0
votes

Les deux réponses précédentes sont correctes - vous ne pouvez pas définir un vecteur de type incomplet.

Cependant, vous pouvez déclarer em> un - avec l'exigence que lorsque vous définissez cela, le type doit être complet. P>

struct Foo; // forward declaration
using FooV = std::vector<Foo>; // declaration

struct Foo { int val; }; // definition
FooV v; // define a vector - all is well.


0 commentaires