Je sais que le code est manquant (Quelqu'un donnera des nombres négatifs). Mais je veux seulement savoir comment résoudre l'injection du constructeur dans cette situation?Injection du constructeur
class PresenterFactory
{
public:
template<class TModel>
AbstractPresenter<TModel>*
GetFor(AbstractView<TModel> * view)
{
return new PresenterA(view, new FakeNavigator());
}
};
class ViewA : public AbstractView<ModelA>
{
static PresenterFactory factory;
public:
ViewA(AbstractPresenter<ModelA> *presenter = factory.GetFor<ModelA>(this)) :
AbstractView<ModelA> (presenter)
{
}
// this one is also not working
// invalid use of ‘class ViewA’
// ViewA()
// {
// this->ViewA(factory.GetFor<ModelA> (this));
// }
};
c'est tout. merci :) –
Excellent point concernant «ceci». Ce n'est pas toujours mauvais de passer 'ceci' dans les classes de base, mais c'est un bon exemple d'un exemple dangereux. Le sous-objet de classe de base transmis à 'GetFor' ne sera pas initialisé, donc si le constructeur de "PresenterA" essaye de lire ou de modifier des données dans 'view', il lira les ordures et tout ce qu'il écrit sera perdu quand le constructeur pour AstractView est finalement appelée. –
Même si certains compilateurs l'avertissent, il est parfaitement possible de passer 'this' dans la liste des initialiseurs du constructeur. La clé est qu'elle ne doit pas être * utilisée * dans le code du constructeur. Mais parfois, c'est nécessaire, par ex. pour le passer ailleurs pour initialiser un membre de référence. – Tom