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.
1
Qual é o caso de uso?
—
R: Sahu
@RSahu Presumivelmente, herdar um construtor de conversão sem exigir herança pública.
—
21419 Ayjay
@ Ayjay, se for esse o caso, o uso da
—
R Sahu
private
herança é mal concebido, IMO.
@RSahu Ayjay está correto. Para ser mais específico, desejo permitir que alguma classe
—
Maçãs
C
seja herdada B
, mas C
não deveria ter acesso aos A
métodos protegidos. No entanto, quero que A
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.
@ Apple, isso parece uma falha de design. Não sei quanto controle você tem sobre essas classes. Se você tem controle sobre o que entra
—
R Sahu
A
, pode se separar A
em duas classes - uma que B
pode herdar public
e a outra private
.