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
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 
{};
De facons à accéder aux methode aprticulière de chacune des Task filles.

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
4
 
		private:
 
			std::map<std::string, boost::shared_ptr<ITask> > Tasks_ ;
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 ;
}
Merci !