Necesito evitar que una clase se derive de, así que pensé para mí mismo, esto es algo que Boost ya debe haber hecho. Sé que tienen un noncopyable, deben tener un nonderivable ...¿Hay alguna manera, usando plantillas, para evitar que una clase sea derivable en C++
imaginar mi sorpresa cuando no pude encontrarlo ....
Eso me hizo pensar .. Debe haber una razón. Tal vez no sea posible usar plantillas.
Estoy seguro de que si fue fácil, estará en las bibliotecas de impulso.
sé cómo hacerlo sin el uso de plantillas, es decir, utilizando una clase base con un constructor privado es decir
class ThatCantBeDerived; // Forward reference
class _NonDeriv
{
_NonDeriv() {}
friend class ThatCantBeDerived;
};
class ThatCantBeDerived : virtual public _NonDeriv
{
public:
ThatCantBeDerived() :
_NonDeriv()
{
}
};
O algo como esto ..
Tal vez sea la referencia hacia delante que causa el problema , o tal vez no hay una manera portátil para lograrlo ..
de cualquier manera, no estoy seguro de por qué no está en alza ..
¿Alguna idea?
ScaryA, de curiocity inactivo, ¿podría revelar por qué uno querría tener una clase no derivable? (Pregunta sincera: nunca tuve un diseño que lo hubiera solicitado, pero supongo que tu pregunta tiene alguna fuente práctica). – DVK
Los identificadores que comienzan con guión bajo seguido de una letra mayúscula (como identificadores que comienzan con doble subrayado) están reservados para la implementación (compilador + biblioteca). No debe llamar a su plantilla '_NonDeriv'. –
@DVK Supongamos que está diseñando una herramienta que está utilizando una estructura fija a la que la clase se asigna directamente (es decir, una struct sk_buff) y toda su biblioteca realiza optimizaciones/suposiciones sobre esa asignación. Seguramente no quieres que alguien pueda cambiar eso, ¿verdad? – ezpz