Salut,

J'ai 2 classes vtkStringArray et vtkDataArray qui héritent d'une classe abstraite vtkAbstractArray.

J'aimerai définir un objet Array dont le type est soit vtkStringArray ou vtkDataArray. Le code ressemble à ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
	if(arrayType == "vtkStringArray")
	{
		// getStringArray() retourne un pointeur vers un objet vtkStringArray
		vtkStringArray *Array = getStringArray();
	}
	else if(arrayType == "vtkDataArray")
	{
		vtkDataArray *Array = getDataArray();
	}
 
	for(unsigned int i=0 ; i < 1000; i++)
	{
                 // Ceci ne fonctionnera pas puisque segArray a été
                 // défini dans une condition if et donc non reconnu ici
		Array->getValue(i);
		...
		...
		...
	}
Le problème est que la fonction getValue que je veux utiliser dans ma boucle for est défini dans vtkStringArray et vtkDataArray mais non pas dans vtkAbstractArray, ce qui fait en sorte que je ne peux pas utiliser un pointeur de type vtkAbstractArray pour résoudre le problème.

Une solution serai de définir 2 objets Array1 de vtkStringArray et Array2 de vtkDataArray et faire ceci dans ma boucle for:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
	for(unsigned int i=0 ; i < 1000; i++)
	{
		if(Array1)
			Array1->getValue(i);
		else
			Array2->getValue(i);
		...
		...
		...
	}
Ceci résoudra le problème mais ajoutera une condition à ma boucle for et donc augmentera le temps d'excecution de mon programme d'un temps significative puisque le nombre d'itérations est souvent très grand.

Est ce qu'il existe une solution qui me permettera d'éliminer le if dans ma boucle for ?

Merci