Je suis assez sûr que la réponse est "vous ne pouvez pas utiliser de modèles, vous devez utiliser des fonctions virtuelles (polymorphisme dynamique)", mais il semble que je devrais dupliquer beaucoup de code si je suis allé cette route. Voici la configuration:"modèles d'exécution"
J'ai actuellement deux classes, ColorImageSegmentation et GrayscaleImageSegmentation. Ils font essentiellement la même chose, mais il existe trois différences - ils fonctionnent sur différents types (ColorImage et GrayscaleImage) - un paramètre, la dimensionnalité de l'histogramme (3 vs 1) est différent - La fonction PixelDifference est différente en fonction de le type d'image
Si je crée une classe
template <TImageType>
class ImageSegmentation
{
};
Je serais en bonne forme. Cependant, je veux avoir cet objet en tant que membre d'une autre classe:
class MyMainClass
{
ImageSegmentation MyImageSegmentation;
};
Mais l'utilisateur doit déterminer le type de MyImageSegmentation
(si l'utilisateur ouvre une image en niveaux de gris, je veux instancier MyImageSegmentation<GrayScaleType>
De même pour un. . image couleur, MyImageSegmentation<ColorType>
)
avec les classes dérivées, je pouvais stocker un pointeur, puis faire:
class MyMainClass
{
ImageSegmentation* MyImageSegmentation;
};
... user does something...
MyImageSegmentation = new ColorImageSegmentation;
mais comment pourrais-je faire quelque chose comme ça avec des modèles? Le problème est que j'ai beaucoup de:
typedef TImageType::HistogramType HistogramType;
typedef TImageType::PixelType PixelType;
genre de choses en cours, donc je ne sais pas comment je les convertir au modèle dynamique polymorphes sans dupliquer un tas de code.
Désolé pour la randonnée ... est-ce que quelqu'un a des suggestions pour moi?
Merci,
David
Veuillez modifier la question pour formater correctement les exemples de code. – chris
Le GIL de Boost (http://www.boost.org/doc/libs/1_45_0/libs/gil/doc/index.html) fait la même chose. Vous pouvez vérifier comment ils ont résolu ce problème. – liori