Bonjour a tous,

J'utilise une librairie dans laquelle j'ai acces a une classe Image utilisant les template:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
template <class T>
class Image
{
public:
 ....
}
ensuite il y a uen autre classe qui cache des Images:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
template <class T>
class ImageCache
{
public:
  //! access the first Image (oldest) in the queue
  virtual const Image<T>& front() const;
  //! the cache of the images
  std::deque< Image<T> > itsCache;
  ....
}
et j'aimerai utilise cette derniere classe pour cacher mes propres images qui possede des metadata, j'ai donc fait comme suit:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
template <class T>
class MonImage : public Image<T>
{
Metadata metadata;
}
et dans mon main lorsque je l'utilise:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
  //creation
  ImageCache< PixRGB<byte> > outCache(size);
  MonImage< PixRGB<byte> > img('./img.jpg');
  Metadata m = Metadata('test');
  img.setMetadata(m);
 
  //recuperation donnees
  string = outCache.front().getMetadata().getText();
a la compilation j'ai
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
  const class Image<PixRGB<unsigned char> >’ has no member named ‘getMetadata’
donc il ne comprend pas que c une MonImage mais une Image ...
J'ai bien essaye de caster avec:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
  string = ((MonImage)(outCache.front())).getMetadata().getText();
mais le compi croit que c un constructeur et me dit que j'ai pas le bon constructeur !!
comment caster dans mon cas ?