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.
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
privateherencia 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
Chereden B, pero Cno debería tener acceso a Alos métodos protegidos. Sin embargo, quiero que Alos 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 Aen dos clases, una que Bpuede heredar publicy la otra private.