Je voudrais créer une classe associée à une autre classe dans une sorte de relation parent-enfant. Pour cela, la classe "enfant" a besoin d'une référence à son parent.En C++, initialisez un membre de classe avec le pointeur 'this' pendant la construction
Par exemple:
template <typename T>
class TEvent {
private: T* Owner;
public: TEvent(T* parent) : Owner(parent) {}
};
class Foo {
private: TEvent<Foo> Froozle; // see below
};
Maintenant, le problème est que je ne peux pas initialiser l'instance Froozle
directement, ni en utilisant la liste d'instanciation du constructeur de Foo, car this
références ne sont pas autorisés là. Mis à part l'ajout d'une autre méthode setParent(T*)
(que je n'aime pas trop parce que cela signifie que je dois laisser l'instance TEvent<>
dans un état invalide), y at-il un moyen d'y parvenir?
Que dit-il. Tant que les objets que vous passez 'this' pour" savoir "ne pas les toucher pendant leur construction (parce que l'objet' this' fait référence à n'est pas entièrement construit à ce moment), cela est bien, même si certains compilateurs (notamment VC) émet un avertissement pour cela. – sbi
VC++ est le point clé ici. Cela fonctionne en effet. On dirait que je dois supprimer cette "erreur" de force. Merci beaucoup! – sunside
Je souhaite que VC++ n'émette un avertissement que lorsque le membre de "this" à l'intérieur du ctor a accédé. BTW, google :: La classe LogMessage dans [google-glog] (http://code.google.com/p/google-glog) stocke "this" dans la liste mem-initializer de ctor à des fins de débogage. J'ai dû recompiler avec l'avertissement #pragma (4355: désactivé) pour le faire fonctionner dans VC2010. –