Bonjour à tous,

Je n'arrive pas à trouver d'exemples pour ce que j'aimerais faire en C++, mais que j'arrive à faire en Java et en C#.

Voici un exemple de code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
template<typename T : public IDetectable>
class IDetector {
public:
  virtual ~IDetector(void) {}
 
  virtual vector<T*> find() = 0;
};
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
class BoxDetector : public IDetector<Box>
{
public:
  BoxDetector(void);
  virtual ~BoxDetector(void);
 
  vector<Box*> find() { /* ... */ }
};
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
class IDetectable
{
public:
  virtual ~IDetectable(void) {}
};
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
class Box : public IDetectable
{
public:
  Box(void);
  virtual ~Box(void);
};
Ce qui me permettrait de faire :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
IDetector<IDetectable>* mDetector = new BoxDetector();
vector<IDetectable*> mBoxes = mDetector->find();
Le problème que je rencontre est que "BoxDetector" n'est pas reconnu comme étant "IDetector<IDetectable>". De plus que je crois que "template<class T : public IDetectable>" n'est pas une expression valide en C++ même si cela ne cause pas d'erreur de compilation?

Ceci ne compile pas car IDetectable n'est pas un nom de type valide:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
IDetector<IDetectable>* detector;
Je code dans Visual Studio et je n'utilise aucune libraire comme BOOST etc.

Merci!