我有一个普通的旧 CRPT(请不要被访问限制分心 - 问题不在于它们):
template<class Derived>
class Base {
void MethodToOverride()
{
// generic stuff here
}
void ProblematicMethod()
{
static_cast<Derived*>(this)->MethodToOverride();
}
};
像往常一样打算这样使用:
class ConcreteDerived : public Base<ConcreteDerived> {
void MethodToOverride()
{
//custom stuff here, then maybe
Base::MethodToOverride();
}
};
现在这static_cast
让我很困扰。我需要一个向下转换(不是向上转换),所以我必须使用显式转换。在所有合理的情况下,转换都是有效的,因为当前对象确实属于派生类。
但是,如果我以某种方式改变了层次结构并且演员现在变得无效怎么办?
在这种情况下,我可以以某种方式强制执行显式向下转换是否有效的编译时检查吗?