Tengo un problema que si tengo una clase de plantilla, que a su vez tiene un método de plantilla que toma un parámetro de otra instancia de la clase (con diferentes argumentos de plantilla), que no puede acceso protegido o miembros privados de la clase pasa como un parámetro, por ejemplo:C++ Problema de acceso de miembro de clase con plantillas
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);
}
¿hay alguna manera de decir que los métodos en MiClase <T> tienen acceso completo a MiClase <SomeOtherT>?
Glee! : D [15char] – GManNickG
Su código en realidad no se compila en Comeau y no puedo encontrar cómo lo permite Standard. Creo que 'template' before' friend' es necesario debido a 14.5.3/3. –
De hecho, también tuve eso :(Lo eliminé porque pensé que no era necesario. (Después de probarlo en VS) No debería probar con eso ... Lo volveré a agregar. ¡Bah! – GManNickG