En una clase que Bhereda de clase A, es posible usar una usingdeclaración para incorporar miembros Aa 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

privateherencia está mal concebido, en mi opinión.CheredenB, peroCno debería tener acceso aAlos métodos protegidos. Sin embargo, quiero queAlos 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 separarseAen dos clases, una queBpuede heredarpublicy la otraprivate.Respuestas:
Como solución alternativa, puede convertir a la clase base y convertirla explícitamente:
fuente