hum, j'ai un petit problème avec les classes amies... comme je le disais avant, je voudrais que la classe HandleC puisse accéder aux données privées de la classe ContainerP. Le problème, c'est que toutes deux sont des classes template. J'ai fais un exemple plus simple :
Code :
- template <class T,class T1> class handle;
- template <class T> class container {
- int priv;
- public:
- friend class handle<T,float>; //comme ça, ça marche, sauf que je ne suis pas sensé savoir ici que le deuxième argument du template est 'float'
- int GetPriv() {return priv;};
- container() {};
- ~container() {};
- };
- template <class T,class T1> class handle {
- public:
- container<T> *owner;
- void test() {owner->priv=1;};
- handle() {};
- ~handle() {};
- };
- int main(int argc, char* argv[])
- {
- handle<int,float> h;
- container<int> c;
- h.owner=&c;
- h.test();
- printf("%d\n",c.GetPriv());
- return 0;
- }
|
le problème est que handle prend deux paramètre (T et T1) alors que container n'en as qu'un (T). le premier argument de la classe handle est forcément le même que celui de la classe container, mais le deuxième n'est pas connu par la classe container. le principe serais que la classe container stocke des objets de type T par des pointeurs, mais que des objets dérivés de la classe T peuvent aussi être stocké dans le container, et la classe handle doit connaitre la classe de base (T) et le type réel de l'objet (T1). là je vois pas trop comment m'y prendre...