salut,
la clause friend donne acc�s aux membres priv�s d'une classe � une autre classe.
J'aimerai restreindre cet acc�s � un seul membre et pas � l'ensemble des membres priv�s.
Est-ce possible ?
salut,
la clause friend donne acc�s aux membres priv�s d'une classe � une autre classe.
J'aimerai restreindre cet acc�s � un seul membre et pas � l'ensemble des membres priv�s.
Est-ce possible ?
C'est possible en feintant. Exemple qui vaut un long discours.
Bref, la question est : "Est-ce que cela en vaut la peine ?" Il faut voir si les r�les se regroupent bien par couches ou non.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 /** But : tester comment mettre en oeuvre une amitié sélective. * ie.: faire en sorte qu'un membre m_i ne soit accessible qu'à une * seule fonction f_i() et que cette dernière n'ait accès qu'à m_i. */ #include <iostream> #include <string> using namespace std; struct empty {}; template <class Super> class Role1 : public Super { template <class T> friend void f1(T&t); friend void f1bis<>(Role1&); const string m1() { return "Méthode 1"; } }; template <class Super> class Role2 : public Super { template <class T> friend void f2(T&t); const string m2() { return "Méthode 2"; } }; typedef Role1<Role2<empty> > TYPE; template <class T> void f1(T&t) { cout << t.m1() << endl; } template <class T> void f2(T&t) { cout << t.m2() << endl; } /*template <class T> void f2(T&t) { cout << t.m1() << t.m2() << endl; }*/ template <class R> void f1bis(R&t) { cout << t.m1() << endl; } int main (int argc, char **argv) { TYPE toto; f1(toto); f1bis(toto); f2(toto); }
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...
Pas directement je pense.
Mais tu peux faire quelque chose de ce genre:
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 class B; class A { private: int _a; int _b; friend void B::set_a(&A, int); }; class B { void set_a(&A a, int i) { A._a = i; } };
Partager