au lieu de: puis-je faire quelque chose comme: p> ou même, car je n'ai pas besoin d'un nom pour Cette structure que je ne l'utilise que dans ce vecteur: p> J'utilise C ++ pendant de nombreuses années et je ne pense pas que ce soit possible. Je pense que ce serait bien si ... p> ou y a-t-il un moyen? P> P>
3 Réponses :
non strong>, 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 que vous pouvez utiliser directement, par exemple p> ou dans un code de modèle p>
Je ne vois pas comment il est pertinent que c ++ est une langue statistique typée.
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. P>
concernant la déclaration en ligne d'une structure dans un paramètre de modèle, par exemple g ++ code> 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 code> alias et avec
auto code> de C ++ 11 qui ne devrait pas être un problème en général. P>
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".
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.
Vous ne pouvez pas faire cela, sauf si vous vous contentez d'un
std :: tuple code>.