2012-11-28 5 views
-5

Je souhaite créer un tableau de plusieurs objets de modèle.Tableau de l'objet de classe modèle

Par exemple, comment faire un tableau rempli de ces 2 objets:

Foo< A, B, C > FooItem (bar_, bor_); 
Foo < D, E, F > FooItem2 (bur_, ber_); 

myArray[0] = FooItem; 
myArray[1] = FooItem2; 

Tableau de pointeurs void *? Tableau classique?

Merci!

+0

Ce que le post montre est une déclaration de fonction. Où est l'objet? –

+0

La question est ambigue. S'il vous plaît essayer http://whathaveyoutried.com/ –

+1

'std :: vector' et [Boost Any] (http://www.boost.org/doc/libs/1_52_0/doc/html/any.html)? –

Répondre

0

Vous pouvez utiliser un vecteur de paires:

std::vector< std::pair< Foo<A, B, C>, Foo<D, E, F> > > array; 

Si au contraire vous voulez un tableau de données simple:

std::pair< Foo<A, B, C>, Foo<D, E, F> > array[size]; 
2

Je suppose que vous voulez dire que vous voulez un tableau qui est en mesure de tenir objets de types différents. Un tableau simple ne peut pas faire cela puisque tous les éléments doivent être du même type, et void* ne serait pas très utile car il n'y aurait aucun moyen de déterminer le type d'un objet, et donc aucun moyen de faire quelque chose d'utile avec eux .

Diverses possibilités, en fonction de la façon dont vous avez l'intention d'utiliser les objets du tableau, comprennent:

  • Définition d'une classe de base commune et des pointeurs de magasin à cela. Si la classe de base est polymorphe, vous pouvez utiliser les fonctions virtuelles dynamic_cast ou typeid pour interagir avec les objets.
  • Boost.Variant peut stocker un objet à partir d'un ensemble prédéfini de types. Ceux-ci peuvent être stockés dans un tableau, sont efficaces (sans nécessiter de redirection supplémentaire) et peuvent être accédés de manière sécurisée sans conversions.
  • Boost.Any peut stocker un objet de tout type.