Em uma classe B
herdar de classe A
, é possível usar uma using
declaração para trazer membros de A
dentro B
, até mesmo modelos, como este:
struct A {
template <typename T>
void foo();
};
struct B : private A {
using A::foo;
};
Mas isso pode ser feito para modelos de conversão?
struct A {
template <typename T>
operator T();
};
struct B : private A {
using A::operator /* ??? */;
};
Parece não haver maneira de se referir ao modelo pelo nome, mas eu gostaria de ser provado errado ou obter algum esclarecimento.
private
herança é mal concebido, IMO.C
seja herdadaB
, masC
não deveria ter acesso aosA
métodos protegidos. No entanto, quero queA
os métodos públicos permaneçam públicos, incluindo esse operador de conversão. Sei que poderia contornar isso de algumas maneiras, mas prefiro evitar escrever código extra para obter tão pouco benefício.A
, pode se separarA
em duas classes - uma queB
pode herdarpublic
e a outraprivate
.Respostas:
Como solução alternativa, você pode converter para a classe base e convertê-la explicitamente:
fonte