Bonsoir à tous!
Suite de mes threads précédent, j'essaye de factoriser du code en créant des templates.

Je me heurte à un problème:
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
21
22
23
24
25
26
27
28
29
30
31
32
 
//Ma classe d'option permettant de stocker une information
template<typename T>
class Option
{
private:
  T value_;
public:
  Option(const T& value) : value_(value) {};
  virtual ~Option(){};
  const T& operator()() const { return value_;};
};
 
class AbstractOptions
{
public:
  //Ajoute les options des classes concretes  une liste passée en paramètre.
  virtual void addOptions(std::vector<Option<???> >& optionList) = 0; //Comment faire pour passer un type inconnu??
};
 
class ConcreteOptions
{
private:
  Option<double> option1_;
  Option<int> option2_;
public:
// .... constructeur destructeur.
  virtual void addOptions(std::vector<Option<???> >& optionList) {
    optionList.push_back(option1_);
    optionList.push_back(option2_);
  };
};
Vous l'aurez remarqué mon problème viens de la méthode addOptions(...) qui permet d'ajouter les options des classes concretes. Je ne sais pas comment faire pour avoir un vector contenant des "Option" de n'importe quel type.
Je sais qu'en Java il y a un quelque chose du genre Option<?> qui permet d'avoir ce genre de comportement.
Est-ce faisable en C++?

Merci d'avance.

PS: J'ai tenté de faire dériver Option<T> d'une classe AbstractOption puis de changer la méthode addOptions(std::vector<Option<???>*>& option) par
addOptions(std::vector<AbstractOption*>& option) mais ceci m'oblige à faire des cast vers Option<?> avec le type toujours inconnu.