Specialisation de classe interne : refusé par le standard c++?
Bonjour,
Le code ci-dessous fonctionne sous visual studio (2008,2010). J'accède à un membre privé depuis l'exterieur du code source d'une classe.
Par ailleurs, il est certain dans le standard que les classes internes ont accès aux membres privés d'une classe (ex: permet de faire les foncteurs internes aux fonctions).
A partir de là, il semblerait logique d'accéder depuis l'extérieur aux membres privés d'une classe, en utilisant une spécialisation de template.
Manque de pot, on me dit que c'est pas du c++ légal. J'aimerai savoir ce qui est issu du standard c++ et justifie ce point de vue.
Code:
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
|
class ClassA
{
public:
template <class T>
class NestedClass{};
private:
int hiddenValue;
};
// I am now outside ClassA source code, and I will grant myself access to hiddenValue.
template <>
class ClassA::NestedClass<float>
{
public:
void changeIt(ClassA& p){ p.hiddenValue = 6;}
};
int main()
{
ClassA a;
ClassA::NestedClass<float> b;
b.changeIt(a);
return 0;
} |
A vos avis éclairés,
ElPedro