2009-10-30 6 views
1

Je travaille actuellement sur une petite fonction de template tokenizer qui jette aussi les jetons à différents objets. Cela fonctionne vraiment bien tant que toutes les strucs que j'ai coulé pour avoir le même nombre d'objets. ce que je voudrais faire savoir, c'est que la fonction soit moulée en structs avec n'importe quel nombre d'objets. Le goulot d'étranglement de la fonction pour moi en ce moment ceci: Quand il était un nombre fixe (dans ce cas, trois) des articles que je l'ai fait:C++: Initialiser struct avec un tableau contenant tous les arguments

mystruct holder = {items[i], items[i+1], items[i+2]}; 

Maintenant, mon idée de pouvoir jeter à structs avec différents articles était de mettre tous les éléments dans un tableau (tous les éléments de struct seront du même type) et initialiser simplement comme ceci:

float values[numItems]; 
for(int j=0; j<numItems; j++) values[j] = items[i+j] 
mystruct holder = {values}; 

Mais unfortunatelly vous ne pouvez pas initialiser un struct comme celui-ci. Est-ce que quelqu'un a une idée sur la façon d'y parvenir? Merci!

+0

À quoi ressemble 'mystruct'? Il semble que vous devriez plutôt utiliser un std :: liste ou un vecteur – Wernsey

+0

hey, mystruct est fondamentalement très simple, des choses comme ceci: modèle struct Vertex { T x, y, z; }; ou: modèle structure TexCoord { T u, v; }; – moka

Répondre

2

Vous pouvez simplement utiliser un constructeur qui prend le tableau comme argument. Les structures sont essentiellement des classes mais avec une visibilité par défaut des membres du public plutôt que du privé.

+0

Merci, eh bien j'ai pensé à cela aussi, mais alors je devrais avoir à faire des pointeurs comme ceci: mystruct * titulaire = new mystruct (valeurs); que je ne veux pas faire. Peut-être que je pourrais ajouter une fonction init ou quelque chose? donc je pouvais faire: support mystruct; holder.init (valeurs); D'autres idées? merci! – moka

+0

ah, j'ai oublié, je ne pouvais pas lancer un objet comme ceci: mystruct holder (valeurs); – moka

+1

A droite, ce n'est pas un cast, mais vous passeriez des "valeurs" au constructeur de la structure ("holder" dans ce cas) – Mutmansky

Questions connexes