Bonjour bonjour !
Deux petit problème s'offrent à moi :
J'ai une classe ( Kernel ) qui contient une map de "string <-> *Task"
Chaque Task a donc un identifiant précis qui me permet d'y acceder .
La classe Task est virtuelle non instanciable ( 3 fonction virtuelle pure ) .
Ma classe Kernel fournit une methode Task * GetTask(string) qui permet de renvoyé un pointeur sur la tache en question .
1ere problème :
Comment renvoyez un pointeur sur le ype dérivée et non sur la classe mére ?
Pexemple sur une
De facons à accéder aux methode aprticulière de chacune des Task filles.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 class Derived : public Task {}; ou sur une class Derived2 : public Task {};
2eme petit problème : J'aimerai que ma fonction renvoie un pointeur null ou equivalent sous boost si la task demandé n'est pas présente dans le Kernel . J'ai pour le moment fait comme suis, mais je ne suis pas convaincu du résultat . Il y d'ailleur surement un deisgn plus élégant au niveau de la gestion d'erreur de ce type, je suis ouvert a toute proposition . (idem concernant mon design de départ !!)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4private: std::map<std::string, boost::shared_ptr<ITask> > Tasks_ ;
Merci !
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 // Return a pointer to the requested task boost::shared_ptr<ITask> Kernel::GetTaskByName(const std::string & TaskToGet) const { std::map<std::string, boost::shared_ptr<ITask> >::const_iterator It = Tasks_.find(TaskToGet); if ( It == Tasks_.end() ) { Log(LOG_ALL,LOG_WARNING) << " Task : " << TaskToGet << " not found in the Kernel" ; boost::shared_ptr<ITask> Tmp ; return Tmp ; } return It->second ; }
Partager