Tengo una base de código anterior aquí, donde utilizaron variables de miembro protegidas. Se puede discutir si esta es una buena idea o no. Sin embargo, el código debe haberse compilado bien con gcc3. que tienen una barra de clase de plantilla derivado que utiliza protegida miembro de x de plantilla de clase Foo igual queMiembro protegido de acceso de una clase en una clase derivada
template <class Something> class Foo {
public:
// stuff...
protected:
some::type x;
}
template <class Something> Bar : Foo<Something> {
public:
void cleanup();
}
Y en la declaración del método de limpieza() no es algo que se hace con x
template <class Something> void Bar<Something>::cleanup() {
doSomeThingCleanUpLike (x);
}
Esto hace no funciona con gcc4, aunque debería haber funcionado con gcc3. Funciona cuando lo cambio a
doSomeThingCleanUpLike (this->x);
¿Por qué es así?
El término "clase de plantilla" suele ser la fuente de confusión. El término correcto es "plantilla de clase", porque la cosa es una plantilla para clases. No es una clase. Editaría tu pregunta, pero posiblemente sea una de las razones por las que te confundiste. – MSalters
La definición de su función de "limpieza" no es conforme. pierde el tipo de devolución y los argumentos de plantilla para "Barra". Claro que así es como está en tu código? –
gracias litb. Lo cambie. el nivel de cafeína no era lo suficientemente alto como para detectarlo. También se cambió a "plantilla de clase". Sin embargo, si su clase de plantilla o plantilla de clase no debería afectar el problema. El término se usa informalmente mucho. – GeeF