Tengo una clase de contenedor que está templada. Estoy sobrecargando el operador de asignación de modo que también se pueden asignar tipos derivados.Acceso a variables de miembros privados desde un operador de asignación de clase con plantilla
Mi problema es que, cuando el tipo no es el mismo, no puedo acceder a los miembros privados de la clase contenedora. ¿Cuál es el mejor enfoque para obtener acceso? Las variables miembro no pueden ser accesibles a través de captadores públicos. ¡Gracias!
Código Ejemplo:
// Note: var is private
template <class T>
Container<T>& Container<T>::operator=(const Container<T>& rhs) {
if(*this != rhs) var = rhs.var; // works for same type
return *this;
}
template <class T>
template <typename U>
Container<T>& Container<T>::operator=(const Container<U>& rhs) {
if(*this != rhs) var = rhs.var; // does NOT work for different types
return *this;
}
Tienes que hacerles amigos, mira http: // stackoverflow.com/questions/3292795/template-friend – imre
Su comprobación de igualdad parece ineficaz. Normalmente deberías verificar 'this! = & Rhs'. Mejor aún, use la expresión copiar y cambiar para implementar la asignación. –
Es solo un código de ejemplo. De hecho, la clase contenedor funciona como un puntero inteligente, por lo tanto, el control es más simple. – steveo225