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.
c++
inheritance
language-lawyer
using-declaration
conversion-operator
Las manzanas
fuente
fuente
private
herencia está mal concebido, en mi opinión.C
heredenB
, peroC
no debería tener acceso aA
los métodos protegidos. Sin embargo, quiero queA
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.A
, puede separarseA
en dos clases, una queB
puede heredarpublic
y la otraprivate
.Respuestas:
Como solución alternativa, puede convertir a la clase base y convertirla explícitamente:
fuente