Mam tutaj starą bazę kodów, w której zastosowano chronione zmienne składowe. Można dyskutować, czy jest to dobry pomysł, czy nie. Jednak kod musi być skompilowany dobrze z gcc3. Mam pochodzący klasy szablon bar, który wykorzystuje chroniony członek X z klasy szablonu Foo jak takDostęp do chronionego elementu klasy w klasie pochodnej
template <class Something> class Foo {
public:
// stuff...
protected:
some::type x;
}
template <class Something> Bar : Foo<Something> {
public:
void cleanup();
}
A w deklaracji metody czyszczenia() jest coś zrobić z X
template <class Something> void Bar<Something>::cleanup() {
doSomeThingCleanUpLike (x);
}
robi to nie działa z gcc4, chociaż powinno działać z gcc3. Działa, gdy zmieniam go na
doSomeThingCleanUpLike (this->x);
Dlaczego tak się dzieje?
Termin "klasa szablonów" często jest źródłem nieporozumień. Prawidłowym terminem jest "szablon klasy", ponieważ jest to szablon dla klas. To nie jest klasa. Chciałbym edytować twoje pytanie, ale jest to prawdopodobnie jeden z powodów, dla których się pomyliłeś. – MSalters
Twoja definicja funkcji "porządkowania" nie jest zgodna. pomija typ powrotu i argumenty szablonu dla "Bar". Pewnie, że to jest w twoim kodzie? –
Dzięki litb. Zmieniłem to. poziom kofeiny nie był wystarczająco wysoki, aby go dostrzec. Została również zmieniona na "szablon klasy". Niezależnie od tego, czy szablon szablonu lub szablon klasy nie powinien mieć wpływu na problem. Termin jest po prostu nieformalnie używany. – GeeF