J'ai rencontré un problème si j'ai une classe template, qui à son tour a une méthode template qui prend un paramètre d'une autre instance de la classe (avec des arguments templates différents), qu'elle ne peut pas accès membres protégés ou privés de la classe passée en paramètre, par exemple:Problème d'accès des membres de classe C++ avec les modèles
template<typename T>class MyClass
{
T v;
public:
MyClass(T v):v(v){}
template<typename T2>void foo(MyClass<T2> obj)
{
std::cout << v << " ";
//error C2248: 'MyClass<T>::v' : cannot access private member declared in class 'MyClass<T>'
std::cout << obj.v << " ";
std::cout << v + obj.v << std::endl;
}
};
int main()
{
MyClass<int> x(5);
MyClass<double> y(12.3);
x.foo(y);
}
Est-il someway dire que les méthodes dans MyClass <T> ont accès à MyClass <SomeOtherT>?
Glee! : D [15char] – GManNickG
Votre code ne compile pas réellement dans Comeau et je ne peux pas trouver comment Standard le permet. Je crois que 'template' avant' friend' est nécessaire en raison de 14.5.3/3. –
Je l'avais aussi :(Je l'ai enlevé parce que je pensais que c'était inutile. (Après avoir testé en VS) Je ne devrais vraiment pas tester avec ça ... Je vais le rajouter. Bah! – GManNickG