Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jonathan Mcdougall
class A { private: B b; C c;
foo(); public: A(); }
;
class B { toto()
;
}
;
class C { test(); }
;
Je voudrais que B::toto() puisse appeller C::test()
Poste du vrai code la prochaine fois.
Pour l'instant je passe un pointeur sur la classe C dans le construteur de B, comme suit:
class B { private: toto() { C->test(); } public: B(C *c); }
;
Ce code compile chez vous?
N'y a-t-il pas plus simple?
Que trouve-tu compliqué?
Avec les pointeurs de fonction par exemple?
Les pointeurs vers les fonctions (surtout membres) ont la réputation d'être pas mal plus "difficiles". Que dirais-tu de
class C { public: void f(); };
class B { private: C &c;
public: B(C &c);
void g() { c.f(); } };
class A { private: C c; B b;
public:
A() : b(c) { }
void h() { b.g(); } };
int main() { A a; a.h(); }
Le constructeur de A peut être potentiellement dangereux, car il compte sur fait que 'c' soit déclaré avant 'b', fait attention. Sinon, tu peux toujours utiliser des std::auto_ptr.
Mais je crois que tu es en droit de te questionner sur ton design : A contient B et C, mais B a besoin de C. Est-il correct que ces trois classes soient séparées? Quel problème essaies-tu de résoudre?
Jonathan
class A
{
private:
B b;
C c;
foo();
public:
A();
}
;
class B
{
toto()
;
}
;
class C
{
test();
}
;
Je voudrais que B::toto() puisse appeller C::test()
Poste du vrai code la prochaine fois.
Pour l'instant je passe un pointeur sur la classe C dans le construteur de
B, comme suit:
class B
{
private:
toto() { C->test(); }
public:
B(C *c);
}
;
Ce code compile chez vous?
N'y a-t-il pas plus simple?
Que trouve-tu compliqué?
Avec les pointeurs de fonction par exemple?
Les pointeurs vers les fonctions (surtout membres) ont la réputation
d'être pas mal plus "difficiles". Que dirais-tu de
class C
{
public:
void f();
};
class B
{
private:
C &c;
public:
B(C &c);
void g()
{
c.f();
}
};
class A
{
private:
C c;
B b;
public:
A()
: b(c)
{
}
void h()
{
b.g();
}
};
int main()
{
A a;
a.h();
}
Le constructeur de A peut être potentiellement dangereux, car il compte
sur fait que 'c' soit déclaré avant 'b', fait attention. Sinon, tu peux
toujours utiliser des std::auto_ptr.
Mais je crois que tu es en droit de te questionner sur ton design : A
contient B et C, mais B a besoin de C. Est-il correct que ces trois
classes soient séparées? Quel problème essaies-tu de résoudre?
Je voudrais que B::toto() puisse appeller C::test()
Poste du vrai code la prochaine fois.
Pour l'instant je passe un pointeur sur la classe C dans le construteur de B, comme suit:
class B { private: toto() { C->test(); } public: B(C *c); }
;
Ce code compile chez vous?
N'y a-t-il pas plus simple?
Que trouve-tu compliqué?
Avec les pointeurs de fonction par exemple?
Les pointeurs vers les fonctions (surtout membres) ont la réputation d'être pas mal plus "difficiles". Que dirais-tu de
class C { public: void f(); };
class B { private: C &c;
public: B(C &c);
void g() { c.f(); } };
class A { private: C c; B b;
public:
A() : b(c) { }
void h() { b.g(); } };
int main() { A a; a.h(); }
Le constructeur de A peut être potentiellement dangereux, car il compte sur fait que 'c' soit déclaré avant 'b', fait attention. Sinon, tu peux toujours utiliser des std::auto_ptr.
Mais je crois que tu es en droit de te questionner sur ton design : A contient B et C, mais B a besoin de C. Est-il correct que ces trois classes soient séparées? Quel problème essaies-tu de résoudre?
Jonathan
Michaël Delva
Mais je crois que tu es en droit de te questionner sur ton design : A contient B et C, mais B a besoin de C. Est-il correct que ces trois classes soient séparées? Quel problème essaies-tu de résoudre?
Pour faire simple, B une classe Capture qui crée une vidéo depuis une source d'acquisition, C est une classe Video qui affiche et manipule une vidéo (qui peut-être celle créée par B), et A est une classe Indexation qui enregistre dans une base de données des événements issus de la vidéo.
J'ai besoin que Capture appelle une fonction Change_Video de Video pour l'informer qu'elle crée une nouvelle vidéo, et donc pour rafraichir l'affichage...
Mais je crois que tu es en droit de te questionner sur ton design : A
contient B et C, mais B a besoin de C. Est-il correct que ces trois
classes soient séparées? Quel problème essaies-tu de résoudre?
Pour faire simple, B une classe Capture qui crée une vidéo depuis une
source d'acquisition, C est une classe Video qui affiche et manipule une
vidéo (qui peut-être celle créée par B), et A est une classe Indexation qui
enregistre dans une base de données des événements issus de la vidéo.
J'ai besoin que Capture appelle une fonction Change_Video de Video pour
l'informer qu'elle crée une nouvelle vidéo, et donc pour rafraichir
l'affichage...
Mais je crois que tu es en droit de te questionner sur ton design : A contient B et C, mais B a besoin de C. Est-il correct que ces trois classes soient séparées? Quel problème essaies-tu de résoudre?
Pour faire simple, B une classe Capture qui crée une vidéo depuis une source d'acquisition, C est une classe Video qui affiche et manipule une vidéo (qui peut-être celle créée par B), et A est une classe Indexation qui enregistre dans une base de données des événements issus de la vidéo.
J'ai besoin que Capture appelle une fonction Change_Video de Video pour l'informer qu'elle crée une nouvelle vidéo, et donc pour rafraichir l'affichage...
Fabien LE LEZ
On 10 Sep 2004 13:55:36 GMT, "Michaël Delva" :
N'y a-t-il pas plus simple?
Ben... Tu veux appeler une fonction membre non statique de C, il te faut forcément un objet de classe C (ou un pointeur, ou une référence). Donc, a priori, la classe B doit effectivement avoir une référence ou un pointeur sur l'objet de classe C.
-- ;-)
On 10 Sep 2004 13:55:36 GMT, "Michaël Delva"
<michael_delva@i_cant_remember.com>:
N'y a-t-il pas plus simple?
Ben... Tu veux appeler une fonction membre non statique de C, il te
faut forcément un objet de classe C (ou un pointeur, ou une
référence). Donc, a priori, la classe B doit effectivement avoir une
référence ou un pointeur sur l'objet de classe C.
Ben... Tu veux appeler une fonction membre non statique de C, il te faut forcément un objet de classe C (ou un pointeur, ou une référence). Donc, a priori, la classe B doit effectivement avoir une référence ou un pointeur sur l'objet de classe C.
-- ;-)
Jonathan Mcdougall
Pour faire simple, B une classe Capture qui crée une vidéo depuis une source d'acquisition, C est une classe Video qui affiche et manipule une vidéo (qui peut-être celle créée par B), et A est une classe Indexation qui enregistre dans une base de données des événements issus de la vidéo.
J'ai besoin que Capture appelle une fonction Change_Video de Video pour l'informer qu'elle crée une nouvelle vidéo, et donc pour rafraichir l'affichage...
En effet, si tu crois que les objets doivent s'inter-utiliser, c'est la seule manière. Je dis ça comme ça, mais Video pourrait-elle être responsable de la capture? Comme ça video.capture() retourne un object Capture et cette fonction s'est chargée elle-même de tout le reste. Mais là, je suis un peu dans le néant. Si ce que tu fais fonctionne, continue.
Jonathan
Pour faire simple, B une classe Capture qui crée une vidéo depuis une
source d'acquisition, C est une classe Video qui affiche et manipule une
vidéo (qui peut-être celle créée par B), et A est une classe Indexation qui
enregistre dans une base de données des événements issus de la vidéo.
J'ai besoin que Capture appelle une fonction Change_Video de Video pour
l'informer qu'elle crée une nouvelle vidéo, et donc pour rafraichir
l'affichage...
En effet, si tu crois que les objets doivent s'inter-utiliser, c'est la
seule manière. Je dis ça comme ça, mais Video pourrait-elle être
responsable de la capture? Comme ça video.capture() retourne un object
Capture et cette fonction s'est chargée elle-même de tout le reste.
Mais là, je suis un peu dans le néant. Si ce que tu fais fonctionne,
continue.
Pour faire simple, B une classe Capture qui crée une vidéo depuis une source d'acquisition, C est une classe Video qui affiche et manipule une vidéo (qui peut-être celle créée par B), et A est une classe Indexation qui enregistre dans une base de données des événements issus de la vidéo.
J'ai besoin que Capture appelle une fonction Change_Video de Video pour l'informer qu'elle crée une nouvelle vidéo, et donc pour rafraichir l'affichage...
En effet, si tu crois que les objets doivent s'inter-utiliser, c'est la seule manière. Je dis ça comme ça, mais Video pourrait-elle être responsable de la capture? Comme ça video.capture() retourne un object Capture et cette fonction s'est chargée elle-même de tout le reste. Mais là, je suis un peu dans le néant. Si ce que tu fais fonctionne, continue.