Como implementar uma verificação em tempo de compilação de que um downcast é válido em um CRT
Eu tenho um CRPT antigo simples (por favor, não se distraia com restrições de acesso - a questão não é sobre eles):
template<class Derived>
class Base {
void MethodToOverride()
{
// generic stuff here
}
void ProblematicMethod()
{
static_cast<Derived*>(this)->MethodToOverride();
}
};
, como de costume, deve ser usado assim:
class ConcreteDerived : public Base<ConcreteDerived> {
void MethodToOverride()
{
//custom stuff here, then maybe
Base::MethodToOverride();
}
};
Agora issostatic_cast
me incomoda. Eu preciso de um downcast (não um upcast), então eu tenho que usar uma conversão explícita. Em todos os casos razoáveis, o elenco será válido, pois o objeto atual é realmente da classe derivad
Mas e se, de alguma forma, eu mudar a hierarquia e o elenco agora se tornar inválid
Posso, de alguma forma, impor uma verificação em tempo de compilação de que um downcast explícito é válido neste cas