Simpler "Prevención de clases derivadas" en C ++
Suponiendo que existe una razón legítima para evitar la derivación de alguna clase, Bjarne da una soluciónaqu para la respuesta a "¿Puedo detener a las personas que se derivan de mi clase?"
Sin embargo, pensé en:
class final {
protected:
final() { } // line 3
};
class B : private virtual final {
};
class D : public B { // line 9
};
int main() {
B b;
D d; // line 14
}
Al intentar compilar, uno obtiene:
foo.cpp: In constructor ‘D::D()’:
foo.cpp:3: error: ‘final::final()’ is protected
foo.cpp:9: error: within this context
foo.cpp: In function ‘int main()’:
foo.cpp:14: note: synthesized method ‘D::D()’ first required here
¿Funciona mi solución para todos los casos? En mi humilde opinión, es mejor porque la clasefinal
es genérico y no requiere conocimiento previo de la clase para evitar la derivación de.