class ConnectBase
{
};
class ConnectToFoo1 : public ConnectBase
{
public:
virtual void Connect(foo1 & f) = 0;
};
class ConnectToFoo2 : public ConnectBase
{
public:
virtual void Connect(foo2 & f) = 0;
};
class Capture
{
private:
foo1 f1;
foo2 f2;
public:
void Connect(ConnectBase * c)
{
ConnectToFoo1 * a = dynamic_cast<ConnectToFoo1 *>(c);
if (a)
a->Connect(f1);
else
{
ConnectToFoo2 * b = dynamic_cast<ConnectToFoo2 *>(c);
if (b)
b->Connect(f2);
}
}
};
Est-ce qu'il n'y aurait pas moyen de faire mieux pour la fonction
Capture::Connect??
class ConnectBase
{
};
class ConnectToFoo1 : public ConnectBase
{
public:
virtual void Connect(foo1 & f) = 0;
};
class ConnectToFoo2 : public ConnectBase
{
public:
virtual void Connect(foo2 & f) = 0;
};
class Capture
{
private:
foo1 f1;
foo2 f2;
public:
void Connect(ConnectBase * c)
{
ConnectToFoo1 * a = dynamic_cast<ConnectToFoo1 *>(c);
if (a)
a->Connect(f1);
else
{
ConnectToFoo2 * b = dynamic_cast<ConnectToFoo2 *>(c);
if (b)
b->Connect(f2);
}
}
};
Est-ce qu'il n'y aurait pas moyen de faire mieux pour la fonction
Capture::Connect??
class ConnectBase
{
};
class ConnectToFoo1 : public ConnectBase
{
public:
virtual void Connect(foo1 & f) = 0;
};
class ConnectToFoo2 : public ConnectBase
{
public:
virtual void Connect(foo2 & f) = 0;
};
class Capture
{
private:
foo1 f1;
foo2 f2;
public:
void Connect(ConnectBase * c)
{
ConnectToFoo1 * a = dynamic_cast<ConnectToFoo1 *>(c);
if (a)
a->Connect(f1);
else
{
ConnectToFoo2 * b = dynamic_cast<ConnectToFoo2 *>(c);
if (b)
b->Connect(f2);
}
}
};
Est-ce qu'il n'y aurait pas moyen de faire mieux pour la fonction
Capture::Connect??
class ConnectBase
{
ici, je mettrais bien un:
};
class ConnectToFoo{1|2} : public ConnectBase {
public:
virtual void Connect(foo{1| 2}& f) = 0;
};
class Capture {
private:
foo1 f1;
foo2 f2;
public:
void Connect(ConnectBase * c)
class ConnectBase
{
ici, je mettrais bien un:
};
class ConnectToFoo{1|2} : public ConnectBase {
public:
virtual void Connect(foo{1| 2}& f) = 0;
};
class Capture {
private:
foo1 f1;
foo2 f2;
public:
void Connect(ConnectBase * c)
class ConnectBase
{
ici, je mettrais bien un:
};
class ConnectToFoo{1|2} : public ConnectBase {
public:
virtual void Connect(foo{1| 2}& f) = 0;
};
class Capture {
private:
foo1 f1;
foo2 f2;
public:
void Connect(ConnectBase * c)
Malheureusement, foo1 et foo2 n'ont pas de base de commune, je n'aurai pas
du choisir des noms aussi proches...
Malheureusement, foo1 et foo2 n'ont pas de base de commune, je n'aurai pas
du choisir des noms aussi proches...
Malheureusement, foo1 et foo2 n'ont pas de base de commune, je n'aurai pas
du choisir des noms aussi proches...
class Camera : public ConnectToFoo
{
};
class Capture
{
private:
Foo foo;
Fiv fiv;
public:
template <class ConnectType>
void Connect(ConnectType * plug);
template <>
void Connect(ConnectToFoo * plug)
{
plug->Connect(foo);
}
template <>
void Connect(ConnectToFiv * plug)
{
plug->Connect(fiv);
}
};
class Camera : public ConnectToFoo
{
};
class Capture
{
private:
Foo foo;
Fiv fiv;
public:
template <class ConnectType>
void Connect(ConnectType * plug);
template <>
void Connect(ConnectToFoo * plug)
{
plug->Connect(foo);
}
template <>
void Connect(ConnectToFiv * plug)
{
plug->Connect(fiv);
}
};
class Camera : public ConnectToFoo
{
};
class Capture
{
private:
Foo foo;
Fiv fiv;
public:
template <class ConnectType>
void Connect(ConnectType * plug);
template <>
void Connect(ConnectToFoo * plug)
{
plug->Connect(foo);
}
template <>
void Connect(ConnectToFiv * plug)
{
plug->Connect(fiv);
}
};
toujours dans mes petits soucis, voici quel est mon problème
aujourd'hui:
class ConnectBase
{
};
class ConnectToFoo1 : public ConnectBase
{
public:
virtual void Connect(foo1 & f) = 0;
};
class ConnectToFoo2 : public ConnectBase
{
public:
virtual void Connect(foo2 & f) = 0;
};
class Capture
{
private:
foo1 f1;
foo2 f2;
public:
void Connect(ConnectBase * c)
{
ConnectToFoo1 * a = dynamic_cast<ConnectToFoo1 *>(c);
if (a)
a->Connect(f1);
else
{
ConnectToFoo2 * b = dynamic_cast<ConnectToFoo2 *>(c);
if (b)
b->Connect(f2);
}
}
};
Est-ce qu'il n'y aurait pas moyen de faire mieux pour la
fonction Capture::Connect??
toujours dans mes petits soucis, voici quel est mon problème
aujourd'hui:
class ConnectBase
{
};
class ConnectToFoo1 : public ConnectBase
{
public:
virtual void Connect(foo1 & f) = 0;
};
class ConnectToFoo2 : public ConnectBase
{
public:
virtual void Connect(foo2 & f) = 0;
};
class Capture
{
private:
foo1 f1;
foo2 f2;
public:
void Connect(ConnectBase * c)
{
ConnectToFoo1 * a = dynamic_cast<ConnectToFoo1 *>(c);
if (a)
a->Connect(f1);
else
{
ConnectToFoo2 * b = dynamic_cast<ConnectToFoo2 *>(c);
if (b)
b->Connect(f2);
}
}
};
Est-ce qu'il n'y aurait pas moyen de faire mieux pour la
fonction Capture::Connect??
toujours dans mes petits soucis, voici quel est mon problème
aujourd'hui:
class ConnectBase
{
};
class ConnectToFoo1 : public ConnectBase
{
public:
virtual void Connect(foo1 & f) = 0;
};
class ConnectToFoo2 : public ConnectBase
{
public:
virtual void Connect(foo2 & f) = 0;
};
class Capture
{
private:
foo1 f1;
foo2 f2;
public:
void Connect(ConnectBase * c)
{
ConnectToFoo1 * a = dynamic_cast<ConnectToFoo1 *>(c);
if (a)
a->Connect(f1);
else
{
ConnectToFoo2 * b = dynamic_cast<ConnectToFoo2 *>(c);
if (b)
b->Connect(f2);
}
}
};
Est-ce qu'il n'y aurait pas moyen de faire mieux pour la
fonction Capture::Connect??
Malheureusement, foo1 et foo2 n'ont pas de base de commune, je
n'aurai pas du choisir des noms aussi proches...
Sinon je me suis dit qu'avec des template je pourrais
peut-être m'en sortir:
class Camera : public ConnectToFoo
{
};
class Capture
{
private:
Foo foo;
Fiv fiv;
public:
template <class ConnectType>
void Connect(ConnectType * plug);
template <>
void Connect(ConnectToFoo * plug)
{
plug->Connect(foo);
}
template <>
void Connect(ConnectToFiv * plug)
{
plug->Connect(fiv);
}
};
Mais le lieur me sort une erreur pour le code suivant:
Capture * cap = new Capture();
Camera * cam = new Camera();
cap->Connect(cam);
Il me sort:
[Linker Error] Unresolved external 'void Capture::Connect<Camera>(Camera
*)' referenced from D:BORLANDCBUILDER6PROJECTSTESTSTEST TEMPLATE
VIDEOAFFICHUNIT1.OBJ
Malheureusement, foo1 et foo2 n'ont pas de base de commune, je
n'aurai pas du choisir des noms aussi proches...
Sinon je me suis dit qu'avec des template je pourrais
peut-être m'en sortir:
class Camera : public ConnectToFoo
{
};
class Capture
{
private:
Foo foo;
Fiv fiv;
public:
template <class ConnectType>
void Connect(ConnectType * plug);
template <>
void Connect(ConnectToFoo * plug)
{
plug->Connect(foo);
}
template <>
void Connect(ConnectToFiv * plug)
{
plug->Connect(fiv);
}
};
Mais le lieur me sort une erreur pour le code suivant:
Capture * cap = new Capture();
Camera * cam = new Camera();
cap->Connect(cam);
Il me sort:
[Linker Error] Unresolved external 'void Capture::Connect<Camera>(Camera
*)' referenced from D:BORLANDCBUILDER6PROJECTSTESTSTEST TEMPLATE
VIDEOAFFICHUNIT1.OBJ
Malheureusement, foo1 et foo2 n'ont pas de base de commune, je
n'aurai pas du choisir des noms aussi proches...
Sinon je me suis dit qu'avec des template je pourrais
peut-être m'en sortir:
class Camera : public ConnectToFoo
{
};
class Capture
{
private:
Foo foo;
Fiv fiv;
public:
template <class ConnectType>
void Connect(ConnectType * plug);
template <>
void Connect(ConnectToFoo * plug)
{
plug->Connect(foo);
}
template <>
void Connect(ConnectToFiv * plug)
{
plug->Connect(fiv);
}
};
Mais le lieur me sort une erreur pour le code suivant:
Capture * cap = new Capture();
Camera * cam = new Camera();
cap->Connect(cam);
Il me sort:
[Linker Error] Unresolved external 'void Capture::Connect<Camera>(Camera
*)' referenced from D:BORLANDCBUILDER6PROJECTSTESTSTEST TEMPLATE
VIDEOAFFICHUNIT1.OBJ
Michael wrote on 28/06/2006 02:47:Malheureusement, foo1 et foo2 n'ont pas de base de commune,
je n'aurai pas du choisir des noms aussi proches...
il ne tient qu'à toi !
tes ConnectToFoo/i/ font certainement qlq chose de proche avec
l'interface reçue - on cherchera, je pense, à ne pas rendre
l'architecture trop DX (ni MS) dépendante, se privant d'un
class ConnectBase {
virtual void Connect(IUnknown&) = null;
};
mais il est surement possible d'introduire un ancêtre
arbitraire commun (quitte à multi-hériter en suite dans les
classes concrêtes Connect2Foo
Michael wrote on 28/06/2006 02:47:
Malheureusement, foo1 et foo2 n'ont pas de base de commune,
je n'aurai pas du choisir des noms aussi proches...
il ne tient qu'à toi !
tes ConnectToFoo/i/ font certainement qlq chose de proche avec
l'interface reçue - on cherchera, je pense, à ne pas rendre
l'architecture trop DX (ni MS) dépendante, se privant d'un
class ConnectBase {
virtual void Connect(IUnknown&) = null;
};
mais il est surement possible d'introduire un ancêtre
arbitraire commun (quitte à multi-hériter en suite dans les
classes concrêtes Connect2Foo
Michael wrote on 28/06/2006 02:47:Malheureusement, foo1 et foo2 n'ont pas de base de commune,
je n'aurai pas du choisir des noms aussi proches...
il ne tient qu'à toi !
tes ConnectToFoo/i/ font certainement qlq chose de proche avec
l'interface reçue - on cherchera, je pense, à ne pas rendre
l'architecture trop DX (ni MS) dépendante, se privant d'un
class ConnectBase {
virtual void Connect(IUnknown&) = null;
};
mais il est surement possible d'introduire un ancêtre
arbitraire commun (quitte à multi-hériter en suite dans les
classes concrêtes Connect2Foo
Sylvain wrote:Michael wrote on 28/06/2006 02:47:Malheureusement, foo1 et foo2 n'ont pas de base de commune,
je n'aurai pas du choisir des noms aussi proches...
il ne tient qu'à toi !
S'il en est auteur. Si les deux classes viennent de deux
bibliothèques tièrces différentes, en revanche...
Et en quoi est-ce que ça résoud sa problème
Sylvain wrote:
Michael wrote on 28/06/2006 02:47:
Malheureusement, foo1 et foo2 n'ont pas de base de commune,
je n'aurai pas du choisir des noms aussi proches...
il ne tient qu'à toi !
S'il en est auteur. Si les deux classes viennent de deux
bibliothèques tièrces différentes, en revanche...
Et en quoi est-ce que ça résoud sa problème
Sylvain wrote:Michael wrote on 28/06/2006 02:47:Malheureusement, foo1 et foo2 n'ont pas de base de commune,
je n'aurai pas du choisir des noms aussi proches...
il ne tient qu'à toi !
S'il en est auteur. Si les deux classes viennent de deux
bibliothèques tièrces différentes, en revanche...
Et en quoi est-ce que ça résoud sa problème