En una clase que B
hereda de clase A
, es posible usar una using
declaración para incorporar miembros A
a B
, incluso plantillas, como esta:
struct A {
template <typename T>
void foo();
};
struct B : private A {
using A::foo;
};
¿Pero se puede hacer para las plantillas de conversión?
struct A {
template <typename T>
operator T();
};
struct B : private A {
using A::operator /* ??? */;
};
Parece que no hay forma de referirse a la plantilla por su nombre, pero me encantaría que me demuestren que estoy equivocado u obtener alguna aclaración.
1
¿Cuál es el caso de uso?
—
R Sahu
@RSahu Presumiblemente para heredar un constructor de conversión sin requerir herencia pública.
—
Ayjay
@Ayjay, si ese es el caso, entonces el uso de la
—
R Sahu
private
herencia está mal concebido, en mi opinión.
@RSahu Ayjay está en lo correcto. Para ser más específico, quiero permitir que algunas clases
—
Manzanas
C
hereden B
, pero C
no debería tener acceso a A
los métodos protegidos. Sin embargo, quiero que A
los métodos públicos sigan siendo públicos, incluido este operador de conversión. Sé que podría solucionar esto de varias maneras, pero preferiría evitar escribir código adicional por tan poco beneficio.
@ Apple, eso parece un defecto de diseño. No sé cuánto control tienes sobre estas clases. Si tiene control de lo que entra
—
R Sahu
A
, puede separarse A
en dos clases, una que B
puede heredar public
y la otra private
.